Java---學習(7)

        spring中的類中定義的變量,方法,構造函數通過標註@Autowired註解可以從配置文件中找到相應的bean,完成自動裝配的工作。默認情況下,@Autowired是按類型來匹配相應的bean,也可以通過名稱來匹配,需要設置名稱。

       如果想使@Autowired註解生效,需要在配置文件中添加AutowiredAnnotationBeanPostProcessor,通過這個,系統將自動解析bean

  1. <bean class=“org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor”/>    
  <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>  

     1.@Autowired按類型裝配

         下面我們先建立一個UserDao類,        

  1. package com.springfirst.Controller;  
  2.   
  3. public class UserDao {  
  4.       
  5.     public  String GetUserName()  
  6.     {  
  7.           
  8.         return “Hello World”;  
  9.     }  
  10.   
  11. }  
package com.springfirst.Controller;

public class UserDao {

    public  String GetUserName()
    {

        return "Hello World";
    }

}

IUserService  接口    

  1. package com.springfirst.Controller;  
  2.   
  3. public interface IUserService {  
  4.   
  5.     public  String GetUserName();  
  6. }  
package com.springfirst.Controller;

public interface IUserService {

    public  String GetUserName();
}

UserService類

  1. package com.springfirst.Controller;  
  2.   
  3. import org.springframework.beans.factory.annotation.Autowired;  
  4.   
  5. public class UserService implements IUserService {  
  6.   
  7.     @Autowired  
  8.     private UserDao userDao;   
  9.       
  10.     public String GetUserName() {  
  11.         // TODO Auto-generated method stub  
  12.         return userDao.GetUserName();  
  13.     }  
  14.   
  15. }  
package com.springfirst.Controller;

import org.springframework.beans.factory.annotation.Autowired;

public class UserService implements IUserService {

    @Autowired
    private UserDao userDao; 

    public String GetUserName() {
        // TODO Auto-generated method stub
        return userDao.GetUserName();
    }

}

 在controller中我們定義userService,系統會進行自動匹配裝載,找到userService的具體實現

  1. @Autowired  
  2. private IUserService userService;  
  3.   
  4.   
  5. @RequestMapping(value=“userdetail”)  
  6. public String userdetail(ModelMap model)  
  7. {  
  8.     String name=userService.GetUserName();  
  9.     System.out.print(name);  
  10.     model.addAttribute(”username”,name);  
  11.     return “userdetail”;  
  12. }  
   @Autowired
    private IUserService userService;


    @RequestMapping(value="userdetail")
    public String userdetail(ModelMap model)
    {
        String name=userService.GetUserName();
        System.out.print(name);
        model.addAttribute("username",name);
        return "userdetail";
    }

  配置文件      

  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” xmlns:context=“http://www.springframework.org/schema/context”  
  4.     xmlns:aop=”http://www.springframework.org/schema/aop” xmlns:p=“http://www.springframework.org/schema/p”  
  5.     xmlns:cache=”http://www.springframework.org/schema/cache” xmlns:repo=“http://www.springframework.org/schema/data/repository”  
  6.     xmlns:tx=”http://www.springframework.org/schema/tx” xmlns:jpa=“http://www.springframework.org/schema/data/jpa”  
  7.     xsi:schemaLocation=”http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd  
  8.         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd  
  9.         http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd  
  10.         http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd  
  11.         http://www.springframework.org/schema/data/repository http://www.springframework.org/schema/data/repository/spring-repository-1.7.xsd  
  12.         http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd  
  13.             http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd ”  
  14.     default-lazy-init=“true”>  
  15.   
  16.     <description>Spring配置</description>  
  17.  <!– 該 BeanPostProcessor 將自動起作用,對標註 @Autowired 的 Bean 進行自動注入 –>    
  18.     <bean class=“org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor”/>    
  19.       
  20.  <bean id=”userService” class=“com.springfirst.Controller.UserService”/>  
  21.   <bean id=”userDao” class=“com.springfirst.Controller.UserDao”/>  
  22.     
  23. </beans>  
<?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"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:p="http://www.springframework.org/schema/p"
    xmlns:cache="http://www.springframework.org/schema/cache" xmlns:repo="http://www.springframework.org/schema/data/repository"
    xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jpa="http://www.springframework.org/schema/data/jpa"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
        http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
        http://www.springframework.org/schema/data/repository http://www.springframework.org/schema/data/repository/spring-repository-1.7.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
            http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd "
    default-lazy-init="true">

    <description>Spring配置</description>
 <!-- 該 BeanPostProcessor 將自動起作用,對標註 @Autowired 的 Bean 進行自動注入 -->  
    <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>  

 <bean id="userService" class="com.springfirst.Controller.UserService"/>
  <bean id="userDao" class="com.springfirst.Controller.UserDao"/>

</beans>


上面的自動裝配是按類型進行匹配的,Spring會自動從配置文件中找到相應的類型,進行裝載

         使用方法進行註解  

  1. private IUserService userService;  
  2.   
  3. @Autowired()  
  4. public void setUserService(IUserService userService) {  
  5.     this.userService = userService;  
  6. }  
  private IUserService userService;

    @Autowired()
    public void setUserService(IUserService userService) {
        this.userService = userService;
    }

           使用構造函數進行註解     

  1. private IUserService userService;  
  2.   
  3.     @Autowired  
  4.     public  UserController(IUserService userService)  
  5.     {  
  6.         this.userService=userService;  
  7.           
  8.     }  
private IUserService userService;

    @Autowired
    public  UserController(IUserService userService)
    {
        this.userService=userService;

    }


          2.@Autowired按名稱裝配

               按名稱裝載的時候,@Autowired需要配合@Qualifier一起使用,通過@Qualifier可以指定名稱。
               如果兩個類同時繼承一個接口,這個時候我們要通過@Qualifier來指定名稱進行匹配,所謂名稱就是XML文件中的bean的id, 這裏我們定義了Employee類和UserService類都繼承IUserService接口

               如果有兩個類同時繼承一個接口,使用的時候如果不通過名稱指定,會報異常。
  1. package com.springfirst.Controller;  
  2.   
  3. import org.springframework.beans.factory.annotation.Autowired;  
  4.   
  5. public class Employee implements IUserService {  
  6.   
  7.       
  8.       
  9.     public String GetUserName() {  
  10.         // TODO Auto-generated method stub  
  11.         return  “Employee”;  
  12.     }  
  13.   
  14. }  
package com.springfirst.Controller;

import org.springframework.beans.factory.annotation.Autowired;

public class Employee implements IUserService {



    public String GetUserName() {
        // TODO Auto-generated method stub
        return  "Employee";
    }

}

          
       
  1. package com.springfirst.Controller;  
  2.   
  3. import org.springframework.beans.factory.annotation.Autowired;  
  4.   
  5. public class UserService implements IUserService {  
  6.   
  7.     @Autowired  
  8.     private UserDao userDao;   
  9.       
  10.     public String GetUserName() {  
  11.         // TODO Auto-generated method stub  
  12.         return userDao.GetUserName();  
  13.     }  
  14.   
  15. }  
package com.springfirst.Controller;

import org.springframework.beans.factory.annotation.Autowired;

public class UserService implements IUserService {

    @Autowired
    private UserDao userDao; 

    public String GetUserName() {
        // TODO Auto-generated method stub
        return userDao.GetUserName();
    }

}

            在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” xmlns:context=“http://www.springframework.org/schema/context”  
  4.     xmlns:aop=“http://www.springframework.org/schema/aop” xmlns:p=“http://www.springframework.org/schema/p”  
  5.     xmlns:cache=“http://www.springframework.org/schema/cache” xmlns:repo=“http://www.springframework.org/schema/data/repository”  
  6.     xmlns:tx=“http://www.springframework.org/schema/tx” xmlns:jpa=“http://www.springframework.org/schema/data/jpa”  
  7.     xsi:schemaLocation=”http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd  
  8.         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd  
  9.         http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd  
  10.         http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd  
  11.         http://www.springframework.org/schema/data/repository http://www.springframework.org/schema/data/repository/spring-repository-1.7.xsd  
  12.         http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd  
  13.             http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd ”  
  14.     default-lazy-init=“true”>  
  15.   
  16.     <description>Spring配置</description>  
  17.  <!– 該 BeanPostProcessor 將自動起作用,對標註 @Autowired 的 Bean 進行自動注入 –>    
  18.     <bean class=“org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor”/>    
  19.       
  20.  <bean id=“userService” class=“com.springfirst.Controller.UserService”/>  
  21.   <bean id=“employee” class=“com.springfirst.Controller.Employee”/>  
  22.   <bean id=“userDao” class=“com.springfirst.Controller.UserDao”/>  
  23.     
  24. </beans>  
<?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"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:p="http://www.springframework.org/schema/p"
    xmlns:cache="http://www.springframework.org/schema/cache" xmlns:repo="http://www.springframework.org/schema/data/repository"
    xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jpa="http://www.springframework.org/schema/data/jpa"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
        http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
        http://www.springframework.org/schema/data/repository http://www.springframework.org/schema/data/repository/spring-repository-1.7.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
            http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd "
    default-lazy-init="true">

    <description>Spring配置</description>
 <!-- 該 BeanPostProcessor 將自動起作用,對標註 @Autowired 的 Bean 進行自動注入 -->  
    <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>  

 <bean id="userService" class="com.springfirst.Controller.UserService"/>
  <bean id="employee" class="com.springfirst.Controller.Employee"/>
  <bean id="userDao" class="com.springfirst.Controller.UserDao"/>

</beans>
            在Controller中我們指定使用名稱爲 userService的bean,通過@Qualifier 指定,代碼如下
          
  1. private IUserService userService;  
  2.   
  3.  //這裏我們使用id爲userService的bean  
  4. @Autowired  
  5. public  UserController(@Qualifier(“userService”)IUserService userService)  
  6. {  
  7.     this.userService=userService;  
  8.       
  9. }  
  private IUserService userService;

     //這裏我們使用id爲userService的bean
    @Autowired
    public  UserController(@Qualifier("userService")IUserService userService)
    {
        this.userService=userService;

    }

      



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章