8_Spring_注解方式管理bean
8_Spring_注解方式管理bean
1注解方式创建对象IOC
导入依赖 aop
@Component 放在类上,用于标记,告诉spring当前类需要由容器实例化bean并放入容器中
该注解有三个子注解
@Controller 用于实例化controller层bean
@Service 用于实例化service层bean
@Repository 用于实例化持久层bean
当不确定是哪一层,就用Component
这几个注解互相混用其实也可以,但是不推荐
第一步:在applicationContext.xml中配置开启注解扫描
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:p="http://www.springframework.org/schema/p"
- xmlns:c="http://www.springframework.org/schema/c"
- xmlns:context="http://www.springframework.org/schema/context"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans.xsd
- http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context.xsd
- ">
- <!--添加注解扫描,扫描指定的包,将包中的所有有注解的类实例化
- base-package 后面放要扫描的包
- 如果有多个包需要扫描,可以使用逗号隔开 com.msb.bean,com.msb.service
- 或者可以写上一层包路径 com.msb
- 可以通过注解指定bean的id@Component("user1")
- 如果不指定,则id默认是 类名首字母小写
- -->
- <context:component-scan
base-package="com.msb.bean"></context:component-scan>
第二步:在类上添加注解,让spring容器给我们创建bean实例并存储于容器中
- package com.msb.bean;
- import org.springframework.stereotype.Component;
- /**
-
- @Author: Ma HaiYang
-
- @Description: MircoMessage:Mark_7001
- */
- @Component(value = "user1")
- public class User {
- }
测试代码
- package com.msb.test;
- import com.msb.bean.User;
- import org.junit.Test;
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.support.ClassPathXmlApplicationContext;
- /**
-
- @Author: Ma HaiYang
-
- @Description: MircoMessage:Mark_7001
- */
- public class Test1 {
- @Test
- public void testGetBean(){
- ApplicationContext context =new
ClassPathXmlApplicationContext("applicationContext.xml"); - User user = context.getBean("user1", User.class);
- System.out.println(user);
- }
- }
组件扫描配置注解识别
- <context:component-scan base-package="com.msb"
use-default-filters="false"> - <context:include-filter type="annotation"
expression="org.springframework.stereotype.Controller"/> - </context:component-scan>
- <context:component-scan base-package="com.msb"
use-default-filters="true"> - <context:exclude-filter type="annotation"
expression="org.springframework.stereotype.Controller"/> - </context:component-scan>
2注解方式依赖注入DI
@Autowired 根据属性数据类型自动装配
@Qualifier 根据属性名称注入依赖
@Resources 可以根据类型,也可以根据名称注入
@Value 注入普通数据类型(8+String)
项目结构如下
applicationContext.xml中配置包扫描和读取属性配置文件
Dao层
接口
实现类
让容器扫描 Service层,实例化对象
接口
实现类
- package com.msb.service.impl;
- import com.msb.dao.UserDao;
- import com.msb.service.UserService;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.beans.factory.annotation.Qualifier;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.stereotype.Service;
- import javax.annotation.Resource;
- /**
-
- @Author: Ma HaiYang
-
- @Description: MircoMessage:Mark_7001
- */
- @Service
- public class UserServiceImpl implements UserService {
- /*
- *@Autowired
- * 根据类型到容器中去寻找对应的对象,找到后给当前属性赋值
- * 不需要依赖 set方法
- * 属性类型可以是接口,会自动匹配对应的实现类对象
- * @Autowired配合 @Qualifier,可以通过名称指定注入的对象
- *
- * @Resource 如果不配置name 那么就是根据类型注入
- * @Resource(name="userDaoImplB") 配置name,就是根据名称注入
- *
- *
- * @Resource 是JDK中javax包的注解
- * @Autowired 和 @Qualifier 是spring中的注解
- *
- * @Value 可以个普通属性赋值
- * @Value 可以使用${}这种表达式获取系统的变量值
- * 或者是.properties属性配置文件中的值
- *
- * */
- //@Autowired
- //@Qualifier("userDaoImplA")
- //@Qualifier("userDaoImplB")
- //private UserDao userDao ;
- @Resource(name="userDaoImplB")
- private UserDao userDao ;
- @Value("${username}")
- private String sname;
- @Value("boy")
- private String sgender;
- @Value("${age}")
- private Integer sage;
- @Override
- public void add() {
- System.out.println("userServiceImpl add ... ... ");
- System.out.println(sname);
- System.out.println(sgender);
- System.out.println(sage);
- userDao.add();
- }
- }
测试代码
- package com.msb.test;
- import com.msb.service.UserService;
- import org.junit.Test;
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.support.ClassPathXmlApplicationContext;
- /**
-
- @Author: Ma HaiYang
-
- @Description: MircoMessage:Mark_7001
- */
- public class Test1 {
- @Test
- public void testGetBean(){
- ApplicationContext context =new
ClassPathXmlApplicationContext("applicationContext.xml"); - UserService userService = context.getBean("userServiceImpl",
UserService.class); - userService.add();
- }
- }
3完全使用注解(了解)
创建配置类,替代XML配置文件
测试代码
- @Test
- public void testGetBean2(){
- ApplicationContext context=new
AnnotationConfigApplicationContext(SpringConfig.class); - UserServiceImpl userService = context.getBean("userServiceImpl",
UserServiceImpl.class); - userService.add();
- }
Generated with Mybase Desktop 8.2.13

浙公网安备 33010602011771号