本节将讲解基于注解方式操作Bean
什么是注解
- 注解是代码特殊标记,格式:@注解名称(属性名称=属性值, 属性名称=属性值..)
- 使用注解,注解作用在类上面,方法上面,属性上面
- 使用注解目的:简化 xml 配置
对象的创建
四个注解都可以用来创建Bean实例分别是
@Component
@Service
@Controller
@Repository
首先需要依赖
spring-aop的依赖包
开启组件扫描
在配置文件中添加context命名空间,并开启组件扫描
<!--开启注解扫描-->
<context:component-scan base-package="life.wangquanguo.spring5"></context:component-scan>
如果需要扫描多个包,每个包之间要用逗号隔开
如果需要设置扫描哪些东西,不需要扫描哪些
<!--注解扫描详细配置
自定义扫描区域
将use-default-filters属性设为false
-->
<context:component-scan base-package="life.wangquanguo.spring5" use-default-filters="false">
<!--只扫描Controller注解的类-->
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
<!--不扫描Controller注解的类-->
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
创建类,在类上添加创建对象注解
@Service
public class UserService {
public void add(){
System.out.println("UserServiceAdd");
userDao.add();
}
}
在测试类中测试,能够正常注入
属性注入
Autowired
根据属性类型进行自动装配
@Service
public class UserService {
@Autowired//自动根据类型注入
private UserDao userDao;
public void add(){
System.out.println("UserServiceAdd");
userDao.add();
}
}
Qualifier
根据名称进行自动装配,需要和@Autowired一起使用
@Service
public class UserService {
@Autowired//自动根据类型注入
@Qualifier("userDaoImpl")//根据名称进行注入,需要配合Autowired注解使用
private UserDao userDao;
public void add(){
System.out.println("UserServiceAdd");
userDao.add();
}
}
Resource
javax拓展包下的注入,可以根据类型注入,也可以根据名称注入
@Service
public class UserService {
@Resource(name = "userDaoImpl")//javax自带的注入,
//可以根据类型或名称注入,当name属性为空时就根据类型注入,当name属性不为空时就根据名称注入
private UserDao userDao;
public void add(){
System.out.println("UserServiceAdd");
userDao.add();
}
}
@Value
注入普通数据类型
@Service
public class UserService {
@Value(value = "1")
private Integer num;
public void add(){
System.out.println("UserServiceAdd");
userDao.add();
System.out.println(num);
}
}
完全注解开发
可以不使用配置文件
创建配置类
首先需要创建一个配置类,代替xml文件
@Configuration
@ComponentScan(basePackages = {"life.wangquanguo.spring5"})
public class SpringConf {
}
其中@Configuration就是使当前类为spring配置类,并需要开启组件扫描注解
测试类
@Test
public void test1(){
ApplicationContext context = new AnnotationConfigApplicationContext(SpringConf.class);
UserService userService = context.getBean("userService", UserService.class);
userService.add();
}
需要用AnnotationConfigApplicationContext的构造方法来创建Spring容器
Q.E.D.
Comments | 1 条评论