Spring的注解Ioc
的配置
注解一共分为四类:
1.创建对象
2.注入数据
3.改变作用范围
4.和生命周期相关
1.创建对象
xml
方式创建对象
相对于xml
配置就是:<bean id=" " class=" "></bean>
id 为要创建对象的唯一标识
class 对象的全限定类名
注解创建创建对象
@component() 组件的意思
作用:把当前类的对象存入IoC
容器中(写在要创建的对象的类上面)
参数: value 指定获取bean对象时的id, 当不指定的时候,就会默认为当前类的名字,首字母小写
由此注解衍生出的三个注解
- @Controller @Service @Repository
表现层 业务层 持久层
- 他们三个是spring框架为我们提供更强语义化的注解,可以让开发者通过注解即知道是哪一层的类。但是没有要求必须对应使用(体现了封装继承的思想)
2.注入数据
xml
方式:使用set注入或者构造函数注入
使用set注入时候就要set方法。构造函数注入的时候就要构造函数
<property name="" value="" || ref="" ></property>
注解注入:
就是给成员方法注入值
@Autowried 会自动的按照类型注入,如果没有找到匹配的类型,那么就会报错,(报什么错看required的属性),如果有唯一的一个类型匹配,那么就注入成功,如果有多个匹配时,还会使用变量名称作为bean的id,在匹配的类型对象列表中,根据id获取,如果能找到依然可以注入成功。找不到就报错。
属性:
required:是否必须注入成功。默认值是true,表示必须注入成功。通常情况下都是取默认值
细节:使用注解注入时,set方法和构造函数就不是必须的了。
@Qualifier
作用:在自动按照类型注入的基础之上,再按照bean的id注入。在给类的成员注入时,不能独立使用。(在junit和spring整合的时候就会单独的用到 Qualifier)
属性:
value:用于指定bean的id。
@Resource
作用:直接使用bean的id来注入。
属性:
name:用于指定bean的id。
@Value:
作用:用于指定基本类型或者String类型的数据。它通常的作用都是用于读取properties文件中的配置
需要借助spring的el表达式。写法:${key} 读取的就是properties文件的value
属性:
value:用于指定数据内容
对于表达式的理解:
表达式的作用:为了取数据
第一、我们要知道表达式写在什么位置,不同的位置代表的含义不一样
第二、去哪里取数据
3.用于改变作用范围的
xml配置改变作用的范围:
bean标签的scope属性
scope:指定对象的作用范围。
singleton :默认值,单例的.
prototype :多例的.
request :WEB 项目中,Spring 创建一个 Bean 的对象,将对象存入到 request 域中.
session :WEB 项目中,Spring 创建一个 Bean 的对象,将对象存入到 session 域中.
global session :WEB 项目中,应用在 Portlet
环境.如果没有 Portlet
环境,那么globalSession
相当于 session.
注解配置:
@scope
作用:用于指定当前bean的作用范围
属性:
value:用于指定作用范围的值。
取值和xml
配置时是一模一样的。
同上……
4.和生命周期有关的注解
和生命周期相关的
- 相当于xml配置就是:bean标签的init-method和destory-method属性
- @PostConstruct
作用:用于指定初始化方法
- @PreDestroy
作用:用于指定销毁方法
5.spring的配置类
@Bean:
- 作用:把当前方法的返回值放入spring的ioc容器
- 属性:
name:用于指定bean的id。默认值是当前方法名称。它和value属性的作用是一样的
@ComponentScan
- 作用:用于指定要扫描的包
- 属性:
value:用于指定要扫描的包。和basePackages的作用相同。
@Configuration
- 作用:表明当前类是spring的一个配置类。
如果该类作为字节码参数传给了AnnotationConfigApplicationContext,则不用写此注解
@Import
- 作用:导入其他的配置类
- 属性:
value:用于指定要导入类的字节码
@PropertyResource
- **作用:**用于指定properties文件的位置
- 属性:
value:用于指定properties文件的位置
classPath:位置
总结:在使用注解和xml配置spring的时候要搭配的使用,不能一味的用哪个来解决配置的问题,
实际的开发的过程中:哪个方便就直接使用哪个,或者公司要求哪个技术就直接用哪个。
xml和代码是分开的,查找的时候,还是要配置文件,
注解和代码是在一起的,方便观看,但是注解是写在类中的,如果要修改类的时候,我们就要重新修改注解的配置,比较麻烦。
改造的步骤:
1.在配置文件中配置要扫描的包
2.用注解的方式创建容器中的对象 注解方式的配置不需要set方法
用到注解 创建对象的注解,和 数据注入的注解
3.删除配置文件中创建对象的部分
我们只改变的是配置方面的代码,对于业务的代码就不会去修改,
我们使用IoC的主要的目的就是为了解耦,把创建对象的方式,交给spring来操作。
原文地址:https://www.cnblogs.com/mudi/p/9839263.html