Spring框架注解
Spring框架主要解决了创建对象、管理对象的问题。
Spring的依赖项名称是spring-context
1.@Bean
添加在配置类中返回对象的方法上。使得Spring框架自动调用此方法,并管理此方法返回的对象放入容器
2.@Configuration
@Configuration可以作用在任意类上,表示该类是一个配置类,其实就相当于一个xml配置文件。在Spring框架中可以使用ApplicationContext直接加载,使类中的配置项生效,或在集成框架中,只要配置类在组件扫描范围内,此类中的配置项即可生效
3.@Component
通用组件注解,泛指各种组件,就是说当我们的类不属于各种归类的时候(不属于@Controller、@Services等的时候),我们就可以使用@Component来标注这个类。当Spring执行组件扫描时,如果发现组件类,就会自动创建类的对象。
注意:组件类不应该是静态的,组件具有功能性。
4. @ComponentScan
用于指定组件扫描的包及其子孙包。包中的类如果添加了组件注解,则Spring执行组件扫描时会自动创建这些添加了组件注解的类的对象。
5.@Controller
组件注解,添加在控制器类上,是以Component为元注解的
6.@Service
组件注解,添加到业务类上,是以Component为元注解的
7.@Repository
组件注解,添加到数据访问类上,用于实例化对象,是以Component为元注解的。
为了避免idea误判,可添加在Mapper类上
8.@Scope
添加在组件类上,设置Spring对象的作用域。
singleton 单实例,全局有且仅有一个
prototype 多实例,每次获取Bean就有一个新的实例
由Spring管理的对象的作用域默认是单例的(并不是单例模式),对于同一个Bean,无论获取多少次,得到的都是同一个对象!如果希望某个被Spring管理的对象不是单例的,可以在类上添加@Scope("prototype")
注解。
9.@Lazy
在单例的情况下,默认不是懒加载的,还可以通过@Lazy
注解控制它是否为懒加载模式!所谓的懒加载,就是“不要逼不得已不创建对象”。
10.@Autowired
可以在类的属性、Setter方法、构造方法上添加@Autowired
注解。
当添加在属性上,Spring会自动从容器中找到合适的对象为此属性注入值
当添加在Setter方法上或构造方法上,Spring会自动调用对应的方法
注意:
使用@Resource
注解也可以实现自动装配(此注解是javax
包中的),其装配机制是先尝试根据名称来装配,如果失败,再尝试根据类型装配!从执行效果上,一定程度可以等效于@Autowired
@Autowired
与@Resource
的区别:
@Autowired:先根据类型,再根据名称
@Resource:先根据名称,再根据类型
@Autowired:可以注解属性、Setter方法、构造方法
@Resource:只能注解属性
@Autowired:由Spring提供
@Resource:由J2EE提供
面试题:
@Resource 和@Autowired 依赖注入的区别是什么?
- @Resource
- 只能放在属性上,表示先按照属性名匹配 IOC 容器中对象 id 给属性注入值
- 若没有成功,会继续根据当前属性的类型匹配 IOC 容器中同类型对象来注入值
- 若指定了 name 属性@Resource(name = “对象 id”),则只能按照对象 id 注入值。
- @Autowird
- 放在属性上:
- 表示先按照类型给属性注入值
- 如果 IOC 容器中存在多个与属性同类型的对象,则会按照属性名注入值.也可以配合@Qualifier(“IOC 容器中对象 id”)注解直接按照名称注入值。
- 放在方法上:
- 表示自动执行当前方法,如果方法有参数,会自动从 IOC 容器中寻找同类型的对象给参数传值,也可以在参数上添加@Qualifier(“IOC 容器中对象 id”)注解按照名称寻找对象给 参数传值。
- 放在属性上:
11.@Qualifier
可以添加在属性、方法参数上,当使用@Autowired
自动装配时,如果存在多个匹配类型的对象,且根据名称无法装配时,可以使用此注解指定名称
面试题:
@Qualifier 使用场 景是什么?
@Qualifier(“IOC 容器中对象 id”)可以配合@Autowird 一起使用, 表示根据指定
的 id 在 Spring 容器中匹配对象
12.@PropertySource
添加在配置类上,使用@PropertySource
注解读取配置文件中的信息
举例:@PropertySource(“classpath:jdbc.properties”)
当Spring框架读取了配置文件中的信息后,会将这些读取到的数据封装在内置的Environment
对象中,后续,任何需要这些配置信息的组件都可以从Environment
中读取到配置的数据。
13. @Value
添加在属性或方法的参数上。主要用于配置读取Environment
数据的表达式,使得Spring为属性、方法的参数注入值
@Value("${spring.jdbc.url}")
private String url;
@Value("${spring.jdbc.driver}")
private String driver;
@Value("${spring.jdbc.username}")
private String username