spring 01 入門案例

b10l07發表於2016-10-12

spring 六大模組
spring core:核心功能
spring aop:面向切面程式設計
spring web:對web開發的支援
spring jdbc:對jdbc操作的支援
spring orm:對hibernate提供支援
spring jee:對javaee其他模組的支援

案例

1. 引入jar包
spring-core.jar
spring-context.jar
spring-expression.jar
spirng-bean.jar
commons-logging.jar

2. 在src下編寫beam.xml(也叫applicationContext.xml)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">
  
    
    <bean id="userDao" class="com.xxjqr.spring01.first_demo.UserDao"></bean>
     
    <bean id="userService" class="com.xxjqr.spring01.first_demo.UserService">
        <property name="userDao" ref="userDao"></property>
    </bean>
    
    <bean id="userAction" class="com.xxjqr.spring01.first_demo.UserAction" init-method="init_" destroy-method="destroy_" scope="singleton">
        <property name="userService" ref="userService"></property>
    </bean>
 </beans>

3. 類

public class UserDao {
    public void save(){
        System.out.println("已經完成save");
    }
}

@Data //生成setter getter toString......方法
public class UserService {
    private UserDao userDao;//屬性一定要有setter 方法才能被注入哦
    
    public void save(){
        userDao.save();
    }
}
@Data
public class UserAction {
    private UserService userService;
    public void save(){
        userService.save();
    }
    
    public void init_(){
        System.out.println("初始化方法呼叫了");
    }
    
    public void destroy_(){
        System.out.println("銷燬方法呼叫了");
    }
}

測試類

public class App {
    //在當前類路徑下去載入bean.xml檔案
    private ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml",App.class);

    @Test
    public void testUserAction() {
        //建立容器
        UserAction action = (UserAction) ac.getBean("userAction");
        action.save();
        
        //ioc視窗銷燬
        ClassPathXmlApplicationContext context = (ClassPathXmlApplicationContext)ac;
        context.destroy();
    }

}
補充:beam.xml細節
細節1:
    id 與 name:
    id 不能以數字開頭,不能含有特殊符號, 不能有空格、逗號等; id 不能重複!
    name 可以以數字開頭,可以有特殊符合,如果name值重複,編譯沒有問題但執行報錯!

    <bean id="user" name="user2,user3 user4" class="cn.itcast.a_config.User"></bean>
    <bean name="user5" class="cn.itcast.a_config.User"></bean>
    <bean id="user6" class="cn.itcast.a_config.User"></bean>
    <bean id="user6" class="cn.itcast.a_config.User"></bean>


細節2: (單例/多例) 

    scope="singleton" 預設表示單例!
    prototype 多例
    init-method="" 在建立完物件之後執行初始化方法
    destroy-method="" 在呼叫容器類的destroy()方法時候,對單例的物件有效!
    lazy-init="true" 延遲初始化 / 這個屬性的設定只對單例有影響,對多例沒有任何影響!
    單例的物件預設是在建立容器的時候就建立所有單例的物件,如果希望在第一次訪問的時候建立單例的物件,就設定延遲初始化
    
    Bean生命週期:
    singleton 單例
    1) 建立物件
        如果有配置延遲初始化,
        lazy-init=true 如果單例的物件有配置延遲初始化, 在建立容器之後,在第一次從容器獲取物件的時候
        建立單例的物件!
        如果沒有配置或延遲初始化為預設值, 單例的物件會在建立容器的時候建立物件
    2) 執行初始化方法 , init-method配置的方法會執行
    3) 呼叫容器destroy() 方法時候,容器在銷燬單例物件的例項的時候,會呼叫destroy-method對應的方法
        此時bean物件會被銷燬!

    prototype 多例
        1) 每次在從容器獲取物件的時候,都會建立新的物件
        2) 每次建立完物件後,就執行初始化方法
        3) java回回收不用資源(jvm gc)  
    

相關文章