今天来学习:
1)Spring框架的DI(依赖注入)中的构造方法注入
2)Spring框架配置文件 parent与abstract标签
3)Spring框架中的自动注入
4)Spring中的注解
一 、
Spring框架的DI(依赖注入)中的构造方法注入
一、构造方法注入:
1)顾名思义构造方法注入就是一构造方法的形式进行创建对象,并且给对象赋值。
2)除此之外需要注意的是:
构造方法注入需要提供构造方法,构造方法参数数量和配置文件=注入的从参数要保持一致(不然会报错:Could not resolve matching constructor)
例如 :
配置文件
<bean id="" class="">
<construct-arg inbdex="0"></construct-arg>
</bean>
二、Spring框架配置文件 parent与abstract标签
XML配置文件 : parent:指示注入类的父类是谁,以便延续父类注入。(父类和子类不能同时用构造注入)
abstract:为true时候 ,不让Spring容器在内存中创建对象(通俗的可以这么理解)
三、Spring框架中的自动注入
自定义属性的对象进行注入:
自定义属性的注入是依赖于set方法的。
由两种方式:在Spring配置文件中的bean标签添加一autowire标签。
1 Autowire=”buType” 当创建spring容器的时候会加载其配置文件,然后加载每一个bean标签,当发现bean标签中有autowire属性值为byType,会到bean中找class所对应的属性,并根据此类型作为注入对象的类型。
2 Autowire=“byName”当创建spring容器的时候会加载其配置文件,然后加载每一个bean标签,当发现bean标签中有autowire属性值为byName,会找到bean的class遍历所有的set的方法,并去掉set,取剩下的内容作为注入对象的内容
3.2)通过注解实现自动注入(导入约束文件)
需要手动添加约束文件context
1@autowired
在启动spring注解功能后,在需要注入的自定义对象上添加此注解。
原理:在创建spring容器时候,会加载配置文件,并发现注解功能开启后,会在创建对象的时候会获取所有的属性,并寻找此标签的属性名作为ID寻找对象,如果找到 则注入,找不到则以此属性名的类型作为依据进行注入
注意:如果配置文件中存在多个相同的bean,在通过注解进行自动注入的时候,如果id找不到 类型也会报如下错误
2@Qulifier(“id”)
使用此注解会强行按其内的值作为ID去进行匹配
3@Resource
增强型注入 :因为集合前两种注解的功能
四、Spring中的注解
首先需要开启包扫描:多个包通过逗号隔开
@Component注解
如果一个类需要spring容器管理,则在此类上加此注解,当类名首字母小写作为所创建对象的ID
原理:类注解的实现原理:当加载Spring容器的时候加载了配置文件 如果配置中开启了包扫描,则会到指定的包下面获取所有的Class,如果Class声明的时候添加Component注解 则把此类添加到Spring容器中进行管理,类型即为当前扫描到的类型,id为类名首字母小写,如果在类中的属性出现了Autowire或者Resource说明需要进行属性值的注入 ,注入之后对象就创建成功
1、 ID的生成策略
依据类名的第二个字母,如果第二个字母大写,则首字母不变,如果第二个字母小写则首字母小写
2 、高级注解
@Scope( “prototype”)控制单例多例
@Lazy 懒加载
@PostConstruct 初始化方法的注解
@PreDestory销毁对象的注解
3 、 程序架构分层的注解
@Repository :pojo包下面的类
@Service:Service包下面的类
@Controller:Servlet
五 、属性中基本数据类型的注入与复杂类型的注入
1 基本类型
通过@value(“注入值”)注解进行
2复杂类型
需要在配置文件中添加util约束
例如
<util:map id=”map”>
<entry></entry>
</util:map>
代码中注解
@value(“#{@map}”)
六、properties文件的读取
1. 创建文件,把文件放在src的根目录
2. 配置文件中进行配置,指向properties文件所在路径
<context:property-placeholder location=”classpath:xx.properties”/>
3. 通过$在代码中进行注入
@Value(“${name}”)