程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> Spring筆記(一),Spring筆記(

Spring筆記(一),Spring筆記(

編輯:JAVA綜合教程

Spring筆記(一),Spring筆記(


Spring框架:

借鑒:http://www.cnblogs.com/cyjch/archive/2012/02/06/2340415.html

Spring框架依賴於兩個jar包:spring.jar、commons-logging.jar。

為便於測試,加入了Junit.jar。

一、一個簡單的示例:

接口類:

1 package com.imooc.myinterface;
2 
3 public interface PersonInterface {
4     void show();
5 }

實現類:

 1 package com.imooc.mybean;
 2 
 3 import com.imooc.myinterface.PersonInterface;
 4 
 5 /**
 6  * UserBean實現了PersonInterface接口
 7  */
 8 public class UserBean implements PersonInterface {
 9     @Override
10     public void show() {
11         System.out.println("UserBean 實現了 PersonInterface接口的 show方法");
12     }
13 }

在spring.xml中配置實現類的bean:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4        xmlns:mvc="http://www.springframework.org/schema/mvc"
 5        xmlns:context="http://www.springframework.org/schema/context"
 6        xmlns:aop="http://www.springframework.org/schema/aop"
 7        xmlns:tx="http://www.springframework.org/schema/tx"
 8        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
 9         http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
10         http://www.springframework.org/schema/aop
11          http://www.springframework.org/schema/aop/spring-aop.xsd
12         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
13 
14 
15     <bean id="userBean" class="com.imooc.mybean.UserBean"></bean>
16 
17 </beans>

測試代碼:

 1 package com.imooc.test;
 2 
 3 import com.imooc.myinterface.PersonInterface;
 4 import org.junit.Test;
 5 import org.springframework.context.ApplicationContext;
 6 import org.springframework.context.support.ClassPathXmlApplicationContext;
 7 
 8 public class TestBean {
 9     @Test
10     public void testUserBean(){
11         ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
12         PersonInterface person = (PersonInterface) context.getBean("userBean");
13         person.show();
14     }
15 }

測試代碼的輸出結果:

 1 UserBean 實現了 PersonInterface接口的 show方法 

二、實例化Bean的三種方式:

類構造器、靜態工廠、實例工廠實例化bean。

BeanFactory類:

 1 package com.imooc.factory;
 2 
 3 import com.imooc.mybean.UserBean;
 4 import com.imooc.myinterface.PersonInterface;
 5 
 6 public class BeanFactory {
 7 
 8     //使用靜態工廠實例化使用
 9     public static PersonInterface UserBeanService(){
10         return new UserBean();
11     }
12 
13     public PersonInterface getUserBeanService(){
14         return new UserBean();
15     }
16 }

spring.xml:

1   <!--使用類構造器直接實例化-->
2     <bean id="userBean" class="com.imooc.mybean.UserBean"></bean>
3     <!--使用靜態工廠實例化-->
4     <bean id="userBean2" class="com.imooc.factory.BeanFactory" factory-method="UserBeanService"></bean>
5     <!--使用實例工廠實例化-->
6     <bean id="factory" class="com.imooc.factory.BeanFactory"></bean>
7     <bean id="userBean3" factory-bean="factory" factory-method="getUserBeanService"></bean>

三、Bean的節點信息:

默認情況下,Spring的IOC容器啟動時會初始化bean,但可以設置bean的lazy-init="true",來延遲bean的啟動,這時只有第一次獲取bean的時候才會初始化bean

若想對所有bean設置初始延時,則可以再根節點beans設置default-lazy-init="true"。

初始化方法可以在bean中加入init_method="init"屬性,其中init為該bean的一個方法;對應有destory-method屬性。

在Spring中通過getBean方法獲得實例,可以用“==”來測試是一個還是多個實例。

1      ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
2         PersonInterface person = (PersonInterface) context.getBean("userBean3");
3         PersonInterface person2 = (PersonInterface) context.getBean("userBean3");
4         person.show();
5         System.out.println(person == person2);

結果:

 1 UserBean 實現了 PersonInterface接口的 show方法 2 true 

調用了2次getBean但只輸出了一次:UserBean 實現了 PersonInterface接口的 show方法,且,返回true說明是一個實例。

Bean交給容器後,默認是單實例的,那麼如何獲取一個新的實例對象?

scope屬性:

令scope=“prototype”即可。

四、Spring的核心機制---依賴注入(Dependence Injection)

依賴注入讓bean與bean直接通過配置文件組織在一起;

依賴注入與控制反轉(Inversion of Control)是同一個概念;

借鑒:http://www.cnblogs.com/xdp-gacl/p/4249939.html

A對象需要使用B對象時,A對B產生了依賴,傳統上我們會new出B(主動權在自己);

但在Spring中創建B的工作由Spring容器完成,然後注入到A中(控制權在Spring容器)

控制反轉:創建對象的控制權進行了轉移(自己-->spring容器)

什麼被反轉了?獲得依賴對象的方式被反轉了!!!


UserDao接口:

1 package com.imooc.myinterface;
2 
3 public interface UserDao  {
4     void show();
5 }

UserDao的實現類:UserDao4MysqlImpl和UserDao4OracleImpl

 1 package com.imooc.impl;
 2 
 3 import com.imooc.myinterface.UserDao;
 4 public class UserDao4MysqlImpl implements UserDao {
 5     @Override
 6     public void show() {
 7         System.out.println("UserDao4MysqlImpl");
 8     }
 9 }
10 
11 
12 package com.imooc.impl;
13 
14 import com.imooc.myinterface.UserDao;
15 
16 public class UserDao4OracleImpl  implements UserDao{
17     @Override
18     public void show() {
19         System.out.println("UserDao4OracleImpl");
20     }
21 }

UserService接口:

 1 package com.imooc.impl;
 2 
 3 import com.imooc.myinterface.UserDao;
 4 import com.imooc.myinterface.UserService;
 5 
 6 /**
 7  * 實現UserService接口是調用了userDao的show方法,一般需要實例化一個UserDao對象:
 8  * UserDao userDao = new UserDao4MysqlImpl();
 9  * 這樣耦合度會上升;
10  * 所以可以配置spring.xml進行注入。
11  */
12 public class UserServiceImpl implements UserService {
13     private UserDao userDao;    //私有的,用於注入
14 
15     @Override
16     public void show() {
17         userDao.show();
18     }
19 
20     public UserDao getUserDao() {
21         return userDao;
22     }
23 
24     public void setUserDao(UserDao userDao) {
25         this.userDao = userDao;
26     }
27 }

spring.xml:

1  <bean id="mysqlDao" class="com.imooc.impl.UserDao4MysqlImpl"></bean>
2     <bean id="oracleDao" class="com.imooc.impl.UserDao4OracleImpl"></bean>
3     <bean id="userService" class="com.imooc.impl.UserServiceImpl">
4         <property name="userDao" ref="mysqlDao"></property>
5     </bean>

測試代碼:

1    @Test
2     public void testUserService(){
3         ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
4         UserService userService = (UserService) context.getBean("userService");
5         userService.show();
6     }

結果:

 1 UserDao4MysqlImpl 

這樣就實現了注入!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved