Java---学习(7)

来源:互联网 发布:php namespace use 编辑:程序博客网 时间:2024/04/30 10:05

        spring中的类中定义的变量,方法,构造函数通过标注@Autowired注解可以从配置文件中找到相应的bean,完成自动装配的工作。默认情况下,@Autowired是按类型来匹配相应的bean,也可以通过名称来匹配,需要设置名称。

       如果想使@Autowired注解生效,需要在配置文件中添加AutowiredAnnotationBeanPostProcessor,通过这个,系统将自动解析bean

[html] view plain copy
print?
  1. <bean class=“org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor”/>    
  <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>  

     1.@Autowired按类型装配

         下面我们先建立一个UserDao类,        

[java] view plain copy
print?
  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  接口    

[java] view plain copy
print?
  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类

[java] view plain copy
print?
  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的具体实现

[java] view plain copy
print?
  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";    }

  配置文件      

[java] view plain copy
print?
  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会自动从配置文件中找到相应的类型,进行装载

         使用方法进行注解  

[java] view plain copy
print?
  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;    }

           使用构造函数进行注解     

[java] view plain copy
print?
  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接口

               如果有两个类同时继承一个接口,使用的时候如果不通过名称指定,会报异常。
[java] view plain copy
print?
  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";    }}

          
       
[java] view plain copy
print?
  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
         
[html] view plain copy
print?
  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 指定,代码如下
          
[java] view plain copy
print?
  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;    }