Spring 使用xml文件、注解配置Bean


 

bean常用的配置方式有2種:

  • xml文件
  • 注解

 


 

 

使用xml文件配置bean

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean name="user" class="com.chy.bean.User" />
    <bean name="goods" class="com.chy.bean.Goods" />
</beans>

 

 

<beans>是根元素。一個<bean>配置一個bean:

 <bean name="" class="" scope="" />

name指定bean的名稱,也可以使用id指定。如果要指定多個名稱,用逗號或分號隔開即可,比如name="grade,score"。

scope指定Bean的實例的作用域,可選,缺省時默認為singleton(單例)。

 

id和name的區別:

  • id必須唯一,name可以重復
  • id不能含有特殊字符,name可以
  • id只能有一個值,name可以有多個值,逗號或分號隔開即可

 

 


 

 

Bean的作用域

作用域 說明
singleton(單例)

 

默認值。

該Bean(類)在Spring容器中只有一個實例,無論引用/獲取這個Bean多少次,都指向同一個對象。

singleton適用於無會話狀態的Bean(如Dao組建、Service組件)。

 

在spring容器啟動時就創建實例,且程序運行過程中,這個Bean只創建、使用一個實例。

由spring容器負責管理生命周期,實例的創建、銷毀均由spring容器負責。

 

prototype(多例)  

 

每次獲取該Bean的實例時,都會創建一個新的實例。

在需要時(從容器中獲取該bean的時)才創建該bean的一個實例。

由spring容器負責創建實例,創建好之后交給調用者,由調用者負責后續處理,spring容器不再管理這個實例。

 

request

 

web中使用。

在一次HTTP請求中,獲取的是該Bean的同一個實例,該實例只在此次HTTP請求中有效。

新的HTTP請求,會創建新的實例。

 

session

 

 web中使用。

在一次HTTP session中獲取的是該Bean的同一個實例(一個session中只創建此bean的一個實例),創建實例只在本次HTTP session中有效。

新的session,會創建新的實例

 

globalSession

 在一個全局的HTTP session中,獲取到的是該Bean的同一個實例。

只在使用portlet上下文時有效。

application

 為每個ServletContext對象創建一個實例。

只在web相關的ApplicationContext中有效。

websocket

 為每個websocket對象創建一個實例。

只在web相關的ApplicationContext中有效。

 

 

Student student1=applicationContext.getBean("student",Student.class);   
Student student2=applicationContext.getBean("student",Student.class);

如果Student的作用域是singleton,則student1、student2都指向內存中的同一個Student對象。

如果Student的作用域是prototype,則student1、student2指向不同的Student對象。

 

 


 

 

Spring加載xml配置文件的常用方式有2種

        // 從類盤符加載,寫相對路徑
        ApplicationContext applicationContext=new ClassPathXmlApplicationContext("spring-config.xml");
        
        // 從文件系統加載,寫絕對路徑,不利於移植,一般都是用上面那種。
        // ApplicationContext applicationContext=new FileSystemXmlApplicationContext("E:\\spring\\src\\spring-config.xml");

 

 


 

 

Spring的模塊化配置

spring的模塊化配置,也叫spring的模塊化開發。

  • 把配置寫在一個xml文件中,xml文件會很臃腫,可以拆分為多個xml文件。
  • 有時候需要多人協作,你寫一個模塊,我寫一個模塊,你那兒有一個xml配置,我這兒有一個xml配置

使用時需要同時引入多個xml配置。

 

 

有2種方式:

  • 在xml種使用<import />導入其它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:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

    <import resource="spring-config.xml" />
</beans>

 

 

  • 在程序中使用多個xml配置構建spring容器
ClassPathXmlApplicationContext applicationContext=new ClassPathXmlApplicationContext("spring-config-controller.xml","spring-config-service.xml" );

參數個數可變。

 

 


 

 

使用注解配置Bean

使用xml進行配置,如果<bean>很多,xml文件會很臃腫。所以通常使用注解來配置bean。

使用spring的注解,需要引入spring-aop-RELEASE.jar。

 

spring常用的類注解:

  • @Service       將業務層(Service層)的類標識為Spring容器中的Bean
  • @Controller   將控制層的類標識為Spring容器中的Bean
  • @Repository    將數據訪問層(Dao層)的類標識為Spring容器中的Bean
  • @Component   將一個類標識為Spring容器中的Bean。

前3個是專用的,@Component是通用的,能用專用的就盡量用專用的。

這4個注解都是類注解,只能對類使用,只能寫在類上面。

 

 

使用示例:

@Component("dog")
public class Dog{
    public void shout(){
        System.out.println("汪汪汪");
    }
}

小括號中寫Bean的name。

 

 

@Component
public class Dog{
    public void shout(){
        System.out.println("汪汪汪");
    }
}

如果缺省name,默認為類名的camel寫法。

 

 

需要在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:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

    <context:component-scan base-package="com.chy.bean" />
</beans>

會自動掃描指定的包,如果類上面有這4個注解中的一個,就把這個類放到Spring容器中,由Spring容器管理這個類的實例。

如果要掃描多個包,比如bean、service、dao,可以使用多個<context:component-scan />,也可以直接掃描父包com.chy。

 

 

使用spring的注解時,需要在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:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
    
    <context:annotation-config />
</beans>

因為包掃描<context:component-scan  base-package="" />是先啟用注解,再掃描包,所以使用包掃描時不必再寫  <context:annotation-config />  。

 

 


 

 

 

使用注解配置scope

@Component
@Scope("prototype")
public class A {
    //......
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM