~~~
<!--
Spring IOC 容器对 Bean 的生命周期进行管理的过程:(demo7)
1.通过构造器或工厂方法创建 Bean 实例
2.为 Bean 的属性设置值和对其他 Bean 的引用
3.调用 Bean 的初始化方法
4.Bean 可以使用了
5.当容器关闭时, 调用 Bean 的销毁方法
在 Bean 的声明里设置 init-method 和 destroy-method 属性, 为 Bean 指定初始化和销毁方法.
注意:需要调用close方法 需要使用ApplicationContext 子接口的方法,声明对象需要换成实现类。
-->
~~~
~~~
//beans.xml
<bean id="pet1" class="cn.li.lesson1.Pet" init-method="init" destroy-method="destroy">
<property name="name" value="老虎"></property>
</bean>
~~~
~~~
//pet类
package cn.li.lesson1;
public class Pet {
private String name;
public Pet() {
super();
System.out.println("空参构造器被调用");
}
public String getName() {
return name;
}
public void setName(String name) {
System.out.println("set方法被调用");
this.name = name;
}
public void init(){
System.out.println("初始化方法");
}
public void destroy(){
System.out.println("销毁方法");
}
@Override
public String toString() {
return "Pet [name=" + name + "]";
}
}
~~~
~~~
//测试类:
public class MainTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
ClassPathXmlApplicationContext ac=new ClassPathXmlApplicationContext("cn/li/lesson1/beans.xml");
Pet bean = (Pet) ac.getBean("pet1");
ac.close();
}
}
~~~

~~~
更加细粒度的定制bean的声明周期方法。
spring中提供了一个Bean后置处理器,允许在调用初始化方法前后对bean进行额外的处理。
Bean后置处理器对IOC容器里所有的Bean实例逐一处理. 作用:检测bean属性的正确性,或者根据特定的标准更改bean的属性值。
实现:
需要创建一个类 实现BeanPostProcessor接口,实现两个方法。在初始化方法被调用前后分别执行.
然后需要将当前类 注册到springIOC容器中。
1.通过构造器或工厂方法创建 Bean 实例
2.为 Bean 的属性设置值和对其他 Bean 的引用
3.将 Bean 实例传递给 Bean 后置处理器的 postProcessBeforeInitialization 方法
4.调用 Bean 的初始化方法
5.将 Bean 实例传递给 Bean 后置处理器的 postProcessAfterInitialization方法
6.Bean 可以使用了
7.当容器关闭时, 调用 Bean 的销毁方法
~~~
~~~
//MyBeanPostProcessor类
package cn.li.lesson3;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
public class MyBeanPostProcessor implements BeanPostProcessor {
//调用init方法后进行处理和增强
@Override
public Object postProcessAfterInitialization(Object obj, String id) throws BeansException {
// TODO Auto-generated method stub
System.out.println("我是bean后置处理器的方法。init之后执行");
if(id.equals("p1")){
Person p=new Person();
p.setName("小四");
return p;
}
return obj;
}
//调用init方法前进行处理和增强
@Override
public Object postProcessBeforeInitialization(Object obj, String id) throws BeansException {
// TODO Auto-generated method stub
System.out.println("我是bean后置处理器的方法。init之前执行");
return obj;
}
}
~~~
~~~
//beans.xml
<bean id="person" class="cn.li.lesson3.Person" init-method="init" destroy-method="destroy">
<property name="name" value="赵铁柱"></property>
</bean>
~~~
~~~
//Person类
package cn.li.lesson3;
public class Person {
private String name;
public Person() {
super();
// TODO Auto-generated constructor stub
System.out.println("person构造器");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
System.out.println("set方法被调用");
}
@Override
public String toString() {
return "Person [name=" + name + "]";
}
public void init(){
System.out.println("bean初始化");
}
public void destroy(){
System.out.println("销毁方法");
}
}
~~~
~~~
//测试类
public class MainTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
ClassPathXmlApplicationContext ac=new ClassPathXmlApplicationContext("cn/li/lesson3/beans.xml");
Person p = (Person) ac.getBean("person");
//System.out.println(p);
ac.close();
}
}
~~~

- spring
- 1.spring第一天
- 1.1 安装spring插件(spring tool suite)
- 1.2 spring概述
- 1.3 控制反转&依赖注入
- 1.4 springIOC容器
- 1.5 依赖注入的四种方式
- 1.6 配置bean的细节
- 1.7 bean之间的关系
- 1.8 bean作用域
- 1.9 补充:创建对象的几种方法
- 1源代码位置
- 2.spring第二天
- 2.1 使用外部属性文件
- 2.2 spEL
- 2.3 bean的生命周期
- 2.4 通过工厂方式配置bean
- 2.5 基于注解的方式配置bean
- 2.6 组件装配
- 2.7 静态代理
- 2.8 动态代理
- 2.9 Cglib代理
- 2源代码位置
- 3. spring第三天
- 3.1 springAOP
- 3.1.1 AOP简介
- 3.1.2 为什么使用AOP
- 3.1.3 AOP关键术语
- 3.1.4 AOP图解
- 3.1.5 springAOP实现步骤
- 3.1.6 SpringAOP实现原理:
- 3.1.7 AOP的好处
- 3.1.8 AOP在实际项目中的主要应用
- 3代码地址
- 3.1.9 纯注解版配置aop的方式
- 3.2 maven环境搭建
- 附IDEA激活码
- 4. spring第四天
- 4.1 c3p0事务
- 4.2 命令窗口事务
- 4.3 c3p0连接池设置
- 4.4 事务中的一些基本概念
- 4.5 事务的传播行为
- 4.6 自定义异常
- 4.7 spring整合Junit单元测试
- 4.8 JdbcTemplate(附源代码)
- 事务源代码
- 4.9 纯注解tx
- 4.10 基于xml配置事务
- 0. jsp页面修改编码方式
- 0.1 eclipse配置tomcat
- 0.单例模式-饱汉模式
- 0.单例模式-饥汉模式
- springMVC
- 1. springmvc第一天
- 1.1 springMVC概述
- 1.2 springmvc框架搭建及第一个应用程序
- 1.3 @RequestMapping
- 1.4 RequestMapping修饰类
- 1.5 RequestMapping精准化映射
- 1.6 Ant风格URL
- 1.7 带有占位符的url映射
- 1.8 REST风格
- 1.9 RequerstParam获取请求正文
- 2. springmvc第二天
- 2.1 优化
- 2.2 POJO绑定请求参数
- 2.3 RequestHeader获取请求报头信息
- 2.4 CookieValue获取Cookie信息
- 2.5 获取原生ServletAPI
- 2.6 ModelAndView处理模型数据
- 2.7 Map、Model、ModelMap处理模型数据
- 2.8 @SessionAttributes注解
- 2.9 @ModelAttribute无返回值方法及方法入参
- 2.10 @ModelAttribute修饰有返回值类型的方法
- 代码地址
- 3. springmvc补充
- 3-1 springmvc工作原理
- 3-2 springmvc form表单提交中文乱码
- 3-3 数据的格式化
- 3-4 自定义类型转换器
- 3-5 其他知识点
- 3-6 crud代码
- 3-7 @DateTimeFormat日期格式化
- 3-8 数据验证的概念及JSR303验证
- 3-9 Hibernate-Validator验证框架
- 3-10 Controller捕获错误消息
- 3-11 errors标签在页面中获取错误消息
- 3-12 错误消息的定制及国际化
- 3-13 自定义拦截器
- 3-14 Java代码中获取国际化信息
- 3-15 超级链接设置国际化
- 3-16 AJAX支持之@RequestBody
- mybatis
- 1. mybatis第一天
- 1. 为什么使用mybatis
- 2. 下载地址
- 3. hello
- 4. mybatis三种开发模式
- 5. 全局配属属性内容
- 6. DTD设置
- 7. Mapper中的CRUD
- 8. 8.mybatis使用主键自增
- 9. #{}中的参数处理
- 10. #{}与${}区别
- 11. 集合数据的查询
- 12 动态sql
- 12.1 if
- 12.2 choose, when, otherwise
- 12.3 trim, where, set
- 12.4 foreach
- 代码位置
- 2. mybatis第二天
- 1.封装map类型的数据
- 2. resultMap自定义封装规则
- 0代码位置
- 3. mybatis缓存机制
- ssm整合
- 1.maven
- 2.ssm基础环境搭建
- 2-1 引入项目依赖的jar包
- 2-2 引入bootstrap,jquery
- 2-3 创建项目包结构
- 2-4 编写web.xml配置文件
- 2-5 编写sping,springmvc,mybatis配置文件
- 2-6 逆向工程mbg.xml
- shiro安全框架
- 1.shiro简介
- 易购Buy商城
- 第一天
- 1.课程计划
- 2.电商行业背景
- 3.易购Buy介绍
- 4.易购Buy架构
- 5.工程搭建
- 6.工程启动和测试
- 7.ssm框架整合
- 8.整合测试
- 9.svn
- 9.1 svn服务端
- 9.2 svn客户端
- 第二天
- 1.SOA架构分析
- 2.dubbo使用方法
- 3.注册中心
- 4.工程改造
- 5.easyUI
- maven
- 1.maven介绍
- 2.idea配置maven和服务器
- 3.创建web工程
- 4.分模块构建工程
- 5. 代码位置
- 6. nexus
- Luence搜索
- 1.了解搜索技术
- 2.Lucene的基本使用
- solr
- SolrCloud
