1>IOC操作Bean管理
1.Bean管理概念
⑴Bean管理指的是两个操作
①Spring创建对象
②Spring注入属性:给对象的属性赋值
⑵Bean管理操作有两种方式
①基于XML配置文件方式实现
②基于注解方式实现
2.IOC 操作 Bean 管理:基于XML配置文件方式操作Bean管理
⑴XML文件配置Bean文件管理
①<bean id="user" class="com.company.spring5.User"></bean>
⑵基于XML方式DI(Dependency Injection)依赖注入属性
⑶注入方式一:使用set方法进行属性注入
①创建Bean类,定义属性和对应的set方法
②在Spring XML配置文件配置对象创建的方式,配置属性注入的值
<!--bean标签配置Bean文件地址-->
<bean id="user" class="com.company.spring5.User">
<!--使用set方法注入属性,name属性:类中的属性的名称,
value属性:注入属性的值-->
<property name="name" value="王霏霏"></property>
</bean>
⑷ 注入方式二:使用有参构造方法进行属性注入
①创建Bean类,定义属性,创建属性对应的有参数的构造方法
②在Spring XML配置文件配置有参构造器的调用方式
<bean id="user" class="com.company.spring5.User">
<constructor-arg name="name" value="王自健"></constructor-arg>
</bean>
⑸注入方式三:p名称空间注入
①在Spring XML配置文件的标签配置中配置p空间的使用
②属性注入
<!--p空间注入使用无参构造器-->
<bean id="user" class="com.company.spring5.User" p:name="章子怡"></bean>
2>基于XML配置文件方式实现IOC:注入属性类型介绍
⑴注入空值和特殊符号
①使用标签null赋空值
<property name="name"><null/></property>
②使用CDATA来赋特殊值,标识CDATA内的内容是值不是特殊符号
<property name="name"><value><![CDATA[<<北京>>]]]></value></property>
⑵注入属性—外部Bean
①注入外部Bean类的意思是,该Bean类有一个属性指向另一个Bean类,在注入时调用XML文件中此Bean类外部配置好的Bean类
②依赖Set方法注入或者依赖有参构造器注入
<!--3.注入外部Bean-->
<bean name="DaoService" class="com.company.spring5.DaoService">
<!--name:标识Service类中该属性的名称-->
<!--ref:标识外部Bean的name值,XML文件依赖这个属性注入外部Bean-->
<property name="dao" ref="Dao"></property>
</bean>
<bean name="Dao" class="com.company.spring5.DaoImpl"></bean>
⑶注入属性—内部Bean
①注入内部Bean类的意思是,该Bean类有一个属性指向另一个Bean类,在注入时直接在该Bean类的该属性处配置调用的Bean类,依赖该Bean类的注入方式内部注入
<bean id="student" class="com.company.spring5.Student">
<property name="sname" value="lucy"></property>
<property name="age" value="17"></property>
<!--注入内部Bean-->
<property name="teacher">
<bean id="teacher" class="com.company.spring5.Teacher">
<property name="tname" value="Jenny"></property>
</bean>
</property>
</bean>
⑷注入属性—级联赋值
①级联赋值,可以理解成数据库中的级联赋值
②方式一:利用外部Bean赋值
<!--5.1级联赋值方式一:利用外部Bean赋值-->
<bean id="student2" class="com.company.spring5.Student">
<property name="sname" value="Bob"></property>
<property name="age" value="17"></property>
<property name="teacher" ref="teacher2"></property>
</bean>
<bean id="teacher2" class="com.company.spring5.Teacher">
<property name="tname" value="王五"></property>
</bean>
③方式二:利用外部Bean赋值,调用外部Bean的属性进行赋值
④方式二要求调用其他Bean类的类中有其他Bean类的get方法
比如说Student类中有一个属性的类型时Teacher类,则应该有该属性的public Teacher getTeacher() {return teacher;}
<bean id="student3" class="com.company.spring5.Student">
<property name="sname" value="Bob"></property>
<property name="age" value="17"></property>
<property name="teacher" ref="teacher3"></property>
<property name="teacher.tname" value="李四"></property>
</bean>
<bean id="teacher3" class="com.company.spring5.Teacher"></bean>
⑸注入属性—集合属性
①注入数组类型数据
<property name="array">
<array>
<value>数据库</value>
<value>Java基础</value>
</array>
</property>
②注入List类型数据
<property name="list">
<list>
<value>14</value>
<value>25</value>
</list>
</property>
③注入Map类型数据
<property name="map">
<map>
<entry key="Java" value="基础"></entry>
<entry key="Spring" value="框架"></entry>
</map>
</property>
④注入Set类型数据
<property name="set">
<set>
<value>柳词</value>
<value>元曲</value>
</set>
</property>
⑤List类型数据注入对象
ⅰ利用ref标签注入外部设置好的Bean对象
<bean id="course1" class="com.company.spring5.list.Course">
<property name="cname" value="数学"></property>
</bean>
<bean id="course2" class="com.company.spring5.list.Course">
<property name="cname" value="语文"></property>
</bean>
<property name="course">
<list>
<ref bean="course1"></ref>
<ref bean="course2"></ref>
</list>
</property>
⑥提取注入集合数据的通用注入部分
ⅰ头文件要引用名称空间util

ⅱ使用util标签完成list集合注入数据
<util:list id="book">
<value>数学</value>
<value>语文</value>
<value>英语</value>
</util:list>
<bean id="bookobject" class="com.company.spring5.list.Book">
//books属性是List类型数据,ref依赖于id为book的对象
<property name="books" ref="book"></property>
</bean>
3>基于XML配置文件方式实现IOC:FactoryBean介绍
⑴Spring有两种Bean形式
①普通bean:class属性为bean类即为该bean实例
②工厂bean:该bean类返回的类型为bean类内定义的返回类型
ⅰ创建FactoryBean类,即该类实现FactoryBean接口
ⅱ实现接口中的getObject()等方法,在getObject方法内返回想要返回的数据类型
public class MyBean implements FactoryBean<Course> {
@Override
public Course getObject() throws Exception {
Course course=new Course();
course.setCname("xxxx");
return course;
}
ⅲXML文件配置FactoryBean
<!--7.FactoryBean实例-->
<bean id="mybean" class="com.company.spring5.factorybean.MyBean"></bean>
ⅳ测试,FactoryBean类实际返回的是getObject()方法中返回的Course类
public void test8(){
ApplicationContext context=new ClassPathXmlApplicationContext("bean1.xml");
Course mybean = context.getBean("mybean", Course.class);
System.out.println(mybean);
}
4>基于XML配置文件方式实现IOC:Bean作用域介绍
⑴Spring中,Bean的作用域有

⑵默认Bean是单实例对象,作用域为singleton
⑶设置Bean作用域的方法
①Bean标签内scope属性定义作用域
<!--8.Bean设置作用域为多实例-->
<bean id="courses1" class="com.company.spring5.list.Course"></bean>
<bean id="courses2" class="com.company.spring5.list.Course" scope="prototype"></bean>

4>基于XML配置文件方式实现IOC:Bean生命周期介绍
⑴生命周期:从对象创建到对象销毁的过程
⑵Bean的生命周期历程
①XML文件配置Bean文件,通过无参构造器创建Bean实例
②依赖Set方法注入该Bean文件的属性
③如果有配置Bean后置处理器)调用后置处理器的postProcessBeforeInitialization方法
④配置Bean文件的初始化方法,调用初始化方法
⑤(如果有配置Bean后置处理器)调用后置处理器的postProcessAfterInitialization方法
⑥获取Bean对象
⑦容器关闭时,调用Bean文件配置的销毁方法
Bean生命周期测试XML配置如下
<bean id="beanlife" class="com.company.spring5.life.BeanLife" init-method="init" destroy-method="delete">
<property name="name" value="xxx"></property>
</bean>
Bean类配置如下

实际效果如下

⑧注意事项:配置初始化方法和销毁方法,需要在XML中Bean标签配置时,加上属性init-method,delete-method,属性值写初始化方法和销毁方法的名字
⑨如果配置了Bean类的后置处理器,Bean实例会在调用初始化方法之前,调用后置处理器的postProcessBeforeInitialization方法,调用初始化方法之后会调用后置处理器的postProcessAfterInitialization方法
⑩设置后置处理器只需要创建一个类,实现BeanPostProcessor接口,即为后置处理器,XML中按照普通Bean方法配置该类,XML解析时自动识别为后置处理器

后置处理器的配置效果如下

5>基于XML配置文件方式实现IOC:XML自动装配介绍
⑴自动装配:根据指定装配规则(属性名称或者属性类型),Spring自动将匹配的属性值进行注入,也就是说Spring在XML配置文件上下文按照指定装配规则查询,查询到就注入到匹配的属性
⑵实现自动装配方法:Bean标签设置属性autowire自动装配的方式,不设置默认为不自动装配。
①autowire=“no”,标识默认情况下,不自动装配,通过ref属性手动设定
②autowire=“byName”,根据该Bean类的属性名(Property标签的name值)和set方法(set属性名)和其他Bean标签id值相同的进行匹配注入
③autowire=“byType”,根据该Bean类的属性的类型和Spring会寻找其他Bean类的类型进行匹配注入,使用byType首先需要保证同一类型的对象,在spring容器中唯一,若不唯一会报不唯一的异常。
④autowire=“constructor”,使用构造方法完成对象注入,根据构造方法的参数类型进行对象查找,相当于采用byType的方式。即Spring会寻找与参数数据类型相同的bean,通过构造函数将其注入。
⑤autowire=“default”,表示默认采用上一级标签的自动装配的取值。如果存在多个配置文件的话,那么每一个配置文件的自动装配方式都是独立的。
<bean id="emp" class="com.company.spring5.autowire.Emp" autowire="byType"></bean>
<bean id="depdd" class="com.company.spring5.autowire.Dept"></bean>
6>基于XML配置文件方式实现IOC:外部属性文件介绍
以引入数据库连接配置为例
⑴直接在XML文件配置数据库信息
①引入druid连接池依赖jar包
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/bookserver"></property>
<property name="username" value="SHY"></property>
<property name="password" value="123456"></property>
</bean>
⑵引入外部属性文件配置数据库连接池
①配置properties配置文件

②XML文件配置名称空间context

③XML配置文件context标签引入外部属性文件
<context:property-placeholder location="jdbc.properties"/>
④配置连接池
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${prop.driverClass}"></property>
<property name="url" value="${prop.url}"></property>
<property name="username" value="${prop.username}"></property>
<property name="password" value="${prop.password}"></property>
</bean>
本文详细介绍了Spring框架中基于XML配置文件的IOC(控制反转)操作,包括Bean管理的概念、XML配置文件创建对象及属性注入的三种方式(set方法、构造器、p名称空间)。此外,还讲解了注入空值、特殊符号、外部Bean、内部Bean、级联赋值、集合属性等特性的实现方法,并探讨了FactoryBean、Bean的作用域、生命周期以及XML自动装配和外部属性文件的应用。
:IOC基于XML配置文件方式操作Bean管理&spm=1001.2101.3001.5002&articleId=111303208&d=1&t=3&u=b77c04a0af9e4375bd41ac252d042787)
1211

被折叠的 条评论
为什么被折叠?



