在spring配置文件配置bean
在运用Spring进行注解式开发时,必须要开启组件扫描component-scan。
配置完下面后就表示spring能扫描test包以及子包下所有的类,并查看类上有没有注解和实例化具有特定注解的类。
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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">
<!-- 注解式 component-scan组件扫描-->
<context:component-scan base-package="test"></context:component-scan>
</beans>
以上过程其实就相当于我们在配置文件中配置相应的bean。
关于IOC过程的注解
- @Component
- 作用:用于把当前类对象存入spring容器中
- 属性: value:用于指定bean的id。 不写value时,默认值是当前类名,且首字母改小写。
- @Controller:表现层组件
- @Service:业务层组件
- @Repository:持久层组件
- @Scope
- 作用:用于指定bean的作用范围
- 属性:
@Scope(“prototype”) 原型
@Scope(“singleton”) 单例
- @Lazy
属性:
false:spring初始化的时候就创建对象(默认是false)
true:当需要使用bean时,才会创建对象
@Lazy(value = true) 开启懒加载
- @PreDestroy
作用:用于指定销毁方法
- @PostConstruct
作用:用于指定初始化方法
@PreDestroy、PostConstruct相等于在bean标签中使用init-method和destroy-methode的
关于DI过程的注解
- @Autowired
- 作用:自动按照类型注入。只要容器中有唯一的一个bean对象类型和要注入的变量类型匹配,就可以注入成功
- 如果ioc容器中没有任何bean的类型和要注入的变量类型匹配,则报错。
- @Qualifier :
- 作用:在按照类中注入的基础之上再按照名称注入。它在给类成员注入时不能单独使用(结合@Autowired一起使用)。但是在给方法参数注入时可以。
- 属性:value——指定注入bean的id。
- @Resource
- 作用:按照id注入。
- 属性:name:用于指定bean的id。
@Resource(name = "vice")
ITestService myTest;
- @Value
- 作用:为属性注入基本类型或String类型的数据
- 属性:value:用于指定数据
的值。
配置类注解
@Configuration
作用: 告诉Spring是一个配置类,等同于在配置文件中配置一个一个bean
可以理解成一个配置文件
@Configuration意思就是把这个类当做配置文件来用,这个类里面的所有的内容就是配置文件
所有加@Bean 方法会将本方法的返回值放到Spring容器
在配置文件里是一个一个bean标签
在这里每个都是一个方法
@Bean 相当于配置文件中的bean
@Configuration
public class MyConfig {
@Bean(name = "ceshi")
@Scope("singleton")
@Lazy(value = true)
public CeShiPeiZhi gen() {
CeShiPeiZhi cspz = new CeShiPeiZhi();
List<String> list = new LinkedList<>();
list.add("🐱");
cspz.setName(list);
return cspz;
}
}
@Resource和@Autowired的区别:
:加载方式不同@Resource是按名字自动装配,
@Resource:如果出现两个值它按照名字去加载的; 如果只有一个值,按照类型加载,其实一开始是按名字加载,Spring替它把按名字加载变成按类型加载的
@Autowired是按照类型去装配,如果有两个该类型的对象时,这时候必须加上@Qualifier
:提供者不同,@Resource是Java默认体系给出的,而@Autowired是Spring提供的
一般我们都使用Autowired