~~~
<!--
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