关于依赖注入:
1:map集合的注入:Map在Spring内部维护了LinkedHashMap 使数据有序。
实体类:
配置:
2:list集合的注入
3:通过构造方法进行注入:
配置文件
index为参数属性位置,从0开始
name为参数方法中参数名称
value直接赋值
ref引用类型
注意事项:
通过构造方法为属性赋值时,一定要保证xml文件中的构造参数,与具体类中的构造方法参数保持一致。
注意:
在没有导入源码的条件下,生成相应的方法可能会造成形式参数不对应
如果在xml配置文件中使用name属性指定参数名进行赋值时,可能会出现问题,所有建议大家使用index进行赋值。
4.Parent属性
在Spring容器创建对象时,需要指明子父级关系,如果不指明,那么Spring容器在创建对象时,只会单纯的创建一个对象,不会维护子父级关系。
使用parent="父级的ID" 进行指定。
5.简化注入操作 autowire---自动装配引用类型过程
<bean id="person" class="domain.Person" autowire="byName"></bean>
在bean中添加了autowire属性可以自定的注入引用类型的值,从此无需再手动注入。
原理:
autowire="byName",先会查找当前bean中的所有set方法,setCat()------>进行转换去掉set首字母小写------->cat属性------>拿到cat属相后与配置文件中的bean标签做匹配。如果bean中的id与之匹配,则能正确注入。
autowire="byType",先会查找当前bean中的所有set方法,setCat()------>进行转换去掉set首字母小写------->cat属性------>找到cat的类型(domain.Cat)---->与bean中的class类型做匹配,如果匹配成功则能正确注入。
注意:如果使用byType;类型进行注入需要保证 class类型唯一
配置全局的:
default-autowire="default" 那么将不会有任何的作用。如果bean中的配置为autowire="default" 那么该配置应该用全局的保持一致。
总结:使用Autowire可以简化配置文件。将引入的注入方式,变成了自动的注入。从此程序员无需关注对象引用的注入。
属性注解:
spring配置文件中添加属性注解:
<!--启动属性注解 --> <context:annotation-config/>
1-@Autowired注入方式:
其实就是autowire属性的增强版,它有两种匹配规则。
1.根据属性的名称与bean中的ID匹配,如果根据bean中的ID值匹配不成功,则根据属性的类型class进行匹配。如果Class类型能够正确匹配。则能注入。如果Class类型没有匹配成功,则报错。
2.@Autowired + @Qualifier(value="catC"),两个注解同时使用的作用,就是指定具体的bean中的ID与之匹配。并且匹配方式变得唯一,必须按照ID进行匹配。如果找不到匹配的ID值那么必然报错
2-Spring的@Resource介绍:
@Resource注解就是@Autowired和@Qualifier(value="catC")的增强版,能够实现
1.按照属性的名称进行匹配bean的id
2.按照属性的class类型进行匹配bean中的class
3.按照指定的ID进行匹配
说明:通常情况下使用@Resource居多,因为功能比较强大。实现的思路和原有的@Autowired不一致。
类的注解:
1-开启包扫描,在spring的配置文件中使用
<context:component-scan base-package="bean"/>
作用:可以创建对象,并且还能为对象赋值(为引用类型赋值)
2-添加@Component注解在类上
注入的原理:首先开启包扫描,那么Spring容器在启动的时候就会到相应的包中去查找所有的添加了 @Component注解的类。并且为这些类创建对象,保存到Spring容器内部。如果类中包含了属性注解,那么在创建对象时完成属性的注入。
3-关于注解ID的生成策略
@Component public class Person{} person
在默认的条件下,bean中的id生成的原则是将类名首字母小写person.但是还需查询第二个字母:如果第二个字母是大写的那么首字母大写。
Person id------>person
PErson id------>PErson
如果为生成的对象指定具体的ID,这时 Spring中默认的ID生成策略将不生效。
同类型注解
@PostConstruct 初始化方法
@PreDestroy 销毁方法
@Scope(value="") 单例多例
@Lazy(true) 懒加载
根据不同的分层情况,设定不同的注解
Dao @Repository
Service @Service
Web(servlet) @Controller
作用:提高代码的可读性