Spring学习日记04_IOC_Bean管理_xml配置
工厂Bean
- Spring里面有两种类型bean
- 普通bean:在配置文件中定义bean类型就是返回类型
- 工厂bean(FactoryBean):在配置文件定义bean类型可以和返回类型不一样
- 工厂bean
- 第一步 创建类,让该类作为工厂bean,实现接口FactoryBean
- 第二步 实现接口里面的方法,在实现的方法中定义返回的bean类型
Class
public class MyBean implements FactoryBean<Course> {
//定义返回bean
public Course getObject() throws Exception {
Course course = new Course();
course.setCname("course");
return course;
}
public Class<?> getObjectType() {
return null;
}
public boolean isSingleton() {
return false;
}
}
public void test4(){
ApplicationContext context = new ClassPathXmlApplicationContext("bean7.xml");
Course course = context.getBean("myBean",Course.class);
System.out.println(course);
}
xml
<bean id="myBean" class="Spring.Ioc.Day07.factorybean.MyBean">
</bean>
bean的作用域
- 在Spring里面,设置创建bean实例是单实例还是多实例
- 在Spring里面,默认情况下,bean是单实例对象
- 如何设置单实例与多实例
- 在spring配置文件bean标签里面有属性(scope)用于设置单实例还是多实例
- scope属性值
- prototype
- singleton
<bean id="book" class="Spring.Ioc.Day05.collection.book" scope="prototype">
<property name="list" ref="bookList"></property>
</bean>
- singleton和prototype区别
- singleton单实例,prototype多实例
- 设置scope值是singleton时,加载spring配置文件时就会创建单实例对象
- 当scope值是prototype时,在调用getBean方法时才创建多实例对象
bean的生命周期
- 生命周期
- 从对象创建到对象销毁的过程
-
bean的生命周期
(1)通过构造器创建bean实例(无参数构造)
(2)为bean的属性设置值和对其他bean的引用(调用set方法)
(3)调用bean的初始化的方法(需要进行配置)
(4)bean可以使用了(对象获取到了)
(5)当容器关闭时,调用bean的销毁方法(需要进行配置销毁的方法) -
演示bean的生命周期
class
public class Orders {
//无参构造
public Orders() {
System.out.println("第一步 执行无参数构造创建bean实例");
}
private String oname;
public void setOname(String oname) {
this.oname = oname;
System.out.println("第二步 调用set方法设置属性值");
}
//创建执行的初始化方法
public void initMethod(){
System.out.println("第三部 执行初始化方法");
}
public void destoryMethod(){
System.out.println("第五步 执行销毁方法");
}
}
xml
<bean id="orders" class="Spring.Ioc.Day11.bean.Orders" init-method="initMethod" destroy-method="destoryMethod">
<property name="oname" value="orderName"></property>
</bean>
test
public void testBean(){
// ApplicationContext context = new ClassPathXmlApplicationContext("bean8.xml");
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("bean8.xml");
Orders orders = context.getBean("orders",Orders.class);
System.out.println("第四步 获取创建bean实例对象");
System.out.println(orders);
context.close();
}
-
bean的后置处理器,bean的七步声明周期
(1)通过构造器创建bean实例(无参数构造)
(2)为bean的属性设置值和对其他bean的引用(调用set方法)
(3)把bean实例传递bean后置处理器方法
(4)调用bean的初始化的方法(需要进行配置)
(5)把bean实例传递bean后置处理器方法
(6)bean可以使用了(对象获取到了)
(7)当容器关闭时,调用bean的销毁方法(需要进行配置销毁的方法) -
演示添加后置处理器效果
- 创建类,实现接口BeanPostProcessor,创建后置处理器
class
public class BeanPost implements BeanPostProcessor {
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
System.out.println("在初始化之前执行的方法");
return bean;
}
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
System.out.println("在初始化之后执行的方法");
return bean;
}
}
xml
</bean>
<!--为所有bean添加配置处理器-->
<bean id="beanPost" class="Spring.Ioc.Day11.bean.BeanPost"></bean>
xml自动装配
- 根据指定装配规则,Spring自动将匹配的属性值进行注入
autowire="byName"- 按属性名称注入,bean的id值要和类的属性名称相同
autowire="byType"- 按属性类型注入,相同类型的bean不能定义多个
xml
<bean id="emp" class="Spring.Ioc.Day25.autowire.Emp" autowire="byName">
<!--手动装配
<property name="dept" ref="dept"></property>
-->
</bean>
<bean id="dept" class="Spring.Ioc.Day25.autowire.Dept"></bean>
引入外部属性文件
- 直接配置数据库信息
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/forest_blog?serverTimezone=UTC"></property>
<property name="username" value="root"></property>
<property name="password" value="123456"></property>
</bean>
- 引入外部属性文件配置数据库连接池
- 创建外部属性文件,properties格式文件
jdbc.properties
prop.driverClass =com.mysql.jdbc.Driver
prop.url = jdbc:mysql://127.0.0.1:3306/forest_blog?serverTimezone=UTC
prop.userName = root
prop.password = 123456
- 把外部文件引入到Spring配置文件中
-
引入名称空间
xmlns:context="http://www.springframework.org/schema/context
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd -
在spring配置文件中使用标签引入外部属性文件
-
<context:property-placeholder location="classpath: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>

浙公网安备 33010602011771号