注释 : XML和注解配置IOC,在配置形式上不同,但是解决的问题是一样的,都是用于解耦。
一 , 注解一共分类四类( 在使用相关注解的时候,在配置配置创建容器要扫描的包
注解形式 创建容器扫描的包
<context:component-scan base-package=“com.qyy”></context:component-scan>
)
(1) 用于创建对象的:
相当于XML配置的 <bean id = "" class= ""></bean>
@Component (value="")-- 作用 :用于把当前类的对象存入容器
属性value用于指定获取bean对象时的id,当不指定时,默认是当前类名,首字母小写
作用于 : 表现层 , 业务层 ,持久层
注释 : 由此注解衍生出三个注解
@Controller ( 表现层) @Service( 业务层) @Repository ( 持久层 )
(他们是Spring框架提供的更强语义化的注解,可让开发者通过注解就知道是那一层的类)
---------------------------------------------------------------------------
(2) 用于注入数据的:
相当于XML配置的, 构造函数注入与set方法注入
<property name = "" value = "" // ref = "" ></property>
@Autowired 作用 : 自动按照类型注入。如果找不到匹配的类型,则会报错(报什么错是看required属性)。如果只有唯一的一个类型匹配,则注入成功。
* 如果有多个匹配时,还会使用变量名称作为bean的id,在匹配的类型对象列表中,根据id获取,如果能找到依然可以注入成功。
* ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200426214349220.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzE4MzQ5Ng==,size_16,color_FFFFFF,t_70)
属性 : 是否必须注入成功,默认值是true 表示必须注入成功;通常情况下都是默认值
使用注解注入时,set方法和构造函数就不是必须有的了
------------------------------------------------------------------------------------------------------------------------------
@Qualifier("XX2") -- ( 在自动按照类型注入的基础之上,在按照Bean的id注入)
属性 value 用于指定bean的id
@Resource(name= "") 直接按照bean id注入
属性 用于指定其他bean的id
@Qualifier("XX2") 与 @Autowired 再给类成员注入时,不能独立使用,
@Value 作用 :
用于指定基本类型或者String类型的数据。它通常的作用都是用于读取properties文件中的配置
* 需要借助spring的el表达式。写法:${
key} 读取的就是properties文件的value
@Value("${jdbc.driver}") ---- jdbc.driver=com.mysql.jdbc.driver
private String driver;
主要作用 : 用于读取property文件中的配置
(3) 用于改变作用范围的:
相当于XML配置的 bean标签的Scope
<bean id="" class="" scope="prototype" ></bean>-->
@Scope (
作用 : 用于指定当前bean的作用范围
属性 : value 用于指定指定作用范围的值 -- 取值和XML配置时一摸一样)
@Scope("singleton") 单例 打印结果 : true
@Scope("prototype") 多例 打印结果 : false
// 根据bean的 id 获取对象
IUserService userServie = ac.getBean("userService", IUserService.class);
IUserService userServie2 = ac.getBean("userService", IUserService.class);
System.out.println(userServie ==userServie2);
(4) 和生命周期相关的:
@PostConstruct(
* 作用:用于指定初始化方法)
* @PreDestroy(
* 作用:用于指定销毁方法)
相当于XML配置的: init-method 和 destory-method 属性
@Bean 把当前对象的返回值放入Spring容器当中,
属性 name 用于指定bean的id,默认值是当前的方法名, 它和value属性是一样的,互为别名
@ComponentScan
作用 : 用于指定要扫描的包
属性 value用于指定扫描的包,和basePackages的作用相同
@Configuration 作用 表明当前类是spring的一个配置类
如果该类作为字节码参数传递给了AnnotationConfigApplicationContext则不用写
@Import(JdbcConfig.class) 作用导入其他的包 , 主配置导入从配置包,从配置不需要写任何的注解
属性:用于指定导入类的字节码(从配置文件)
@@PropertySource("classpath:jdbc.properties")用于指定properties文件的位置
属性 : 用于指定properties文件的位置