Spring的常用注解
一、常用IOC注解按照作用分类
1、用于创建对象的注解@Component
(1)作用位置:实现类上
(2)注意事项,beans.xml容器中必须告知Spring要扫描的包,使用context标签,如图
(3)@Component衍生三个注解
Controller、Service、Repository 三个注解,都跟Component注解一样,用于不同层,Controller用于表现层、Service用于业务层、Repository用于持久层。
2、用于注入数据的注解@Autowired
(1) 作用:自动按照类型注入。只要容器中有唯一的一个bean对象和要注入的变量类型匹配成功,就可以注入成功,如果IOC容器中没有任何的类型和要注入的变量类型匹配,则报错。
(2)出现位置:可以使变量上,也可以是方法上
(3)细节:在使用注解注入时,set方法就不是必须的了
(4)原理图:
(5)@Autowired的衍生注解
1、@Qualifier
作用:按照类中注入的基础上再按名称注入,他在給类成员注入时不可单独使用,要结合@Autowired一起使用,但在給方法注入时可以单独使用
属性:value:用于指定bean的id
2、@Resource
作用:直接按照bean的id注入,可独立使用
属性:name:用于指定bean的id
(6)以上@Autowired注解以及他的衍生注解,只能用于注入其他类型的bean类型数据,不可以用于基本数据类型和String。此外,集合类型的注入只能通过XML来实现。
1、@Value
作用:用于注入基本数据类型和String类型的数据
属性:value:用于指定数据的值,它可以使用Spring的Spel表达式,Spel写法:${表达式}
3、用于作用范围的注解@Scope
(1)作用:用于指定bean的作用范围
(2)属性:value:执行范围的取值,常用取值:singleton、prototype
(3)位置:和@Component注解一样
4、用于生命周期的注解@PreDestroy和@PostConstruct
(1)@PreDestroy 作用于类中的destroy方法,用于销毁
(2)@PostConstruct 作用与类中的init方法,用于初始化
问题1:无论是使用使用spring的常用注解(告知spring需要扫描的包context),还是使用xml配置,都少不了bean.xml文件,要想摆脱bean.xml的限制,就得引入spring的新注解
Spring的新注解
新建一个配置类Config.SpringCongratulation.java,使用@Configuration注解,声明其是一个配置类,@ComponentScan可以指定配置类扫描的包。
@Configuration
作用:声明一个类是配置类
细节:当使用配置类的字节码获取配置类时可以省略
@ComponentScan
作用:指定Spring在创建容器时扫描的包
属性:value:和basePackages的作用是一样的,用于指定spring创建容器时要扫描的包。
@Bean
作用:用于把当前方法的返回值作为bean对象存入Spring的IOC容器当中
属性:name用于指定bean的id,不写时,默认为当前方法的名称
细节:当我们使用注解配置类型时,如果方法有参数,spring框架会去容器 中查找有没有可用的bean对象,跟@Autowired是一样的。
作用范围:默认是单例的,要想使用多例bean对象,则在方法上加上@Scope(value = “prototype”)注解
问题2:当去掉了bean.xml文件,该用了配置类,那么如何读取容器,之前使用bean.xml文件时,是使用
ApplicationContext ac = new ClassPathXmlApplicationContext(“bean.xml”)来读取IOC容器数据,而现在是读取配置类的信息,ApplicationContext = new AnnotationConfigApplicationContext(SpringConfiguration.class)来读取IOC容器。
@Import
作用:用于加载其他配置类 @Import(JdbcConfig.class)
属性:value:用于指定其他配置类字节码,当使用@Import注解时,有Import注解的就是主配置类,被导入的就是子配置类
@PropertySource
作用:用于指定properties文件的位置
属性:value:指定文件的名称和路径
关键字:classpath,表示类路径下
使用:@PropertySource(“classpath:JdbcConfig.properties”)或者@PropertySource(“classpath:Spring\JdbcConfig.properties”)