`
mywhy
  • 浏览: 66548 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

Spring2.5依靠注入的方式有三种

 
阅读更多
Spring2.5依靠注入的方式有三种:
 1.通过setter方法注入;
 2.通过构造方法注入;
 3.通过注解进行注入;

 
第一种方式:通过setter方法注入

Java代码

  package com.test;   
      
    public class UserServiceImplement implements IUserService   
      
    {   
        private IUserDao user;   
      
        public IUserDao getUser() {   
            return user;   
        }   
      
        public void setUser(IUserDao user) {   
            this.user = user;   
        }   
      
        public void saveUser() {   
            user.addUser();   
        }   
    }  

 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:lang="http://www.springframework.org/schema/lang"  
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-2.0.xsd">  
        <bean id="userdao" class="com.test.UserDaoImplement"></bean>  
        <bean id="userservice" class="com.test.UserServiceImplement">  
            <property name="user" ref="userdao"></property>  
        </bean>  
    </beans>  

 注重这种方法还可以把XML改成以下方式:

 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:lang="http://www.springframework.org/schema/lang"  
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-2.0.xsd">  
        <bean id="userservice" class="com.test.UserServiceImplement"> <!-- <property name="user" ref="userdao"></property>-->  
            <property name="user">  
                <bean class="com.test.UserDaoImplement"></bean>  
            </property>  
        </bean>  
    </beans>  

这两者的区别在于,第二种方式只会注入到当前这个Bean实例中,而不能再注入到其它的Bean中,第一种方式被注入的Bean可以注入到多个Bean当中,这可能会有一些线程安全的问题,因此在最好指定被注入的Bean的作用域。

 另外通过setter方式注入,对应的注入依靠属性,必须要有setter方法。

 
测试代码:

Java代码

  package com.test;   
      
    import org.springframework.context.ApplicationContext;   
    import org.springframework.context.support.ClassPathXmlApplicationContext;   
      
    public class Test {   
        public static void main(String[] args) {   
            ApplicationContext ctx = new ClassPathXmlApplicationContext(   
                    "com/test/bean.xml");   
            IUserService us = (IUserService) ctx.getBean("userservice");   
            us.saveUser();   
        }   
    }  
 

第二种方式:通过构造方法进行注入

Java代码

  package com.test;   
      
    public class UserServiceImplement implements IUserService {   
        private IUserDao user;   
        int age;   
      
        public UserServiceImplement(IUserDao user, int age) {   
            this.user = user;   
            this.age = age;   
        }   
      
        public void saveUser() {   
            user.addUser();   
            System.out.println(this.age);   
        }   
    }  

 

Xml代码

 <beans xmlns="http://www.springframework.org/schema/beans"  
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:lang="http://www.springframework.org/schema/lang"  
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-2.0.xsd">  
        <bean id="userdao" class="com.test.UserDaoImplement"></bean>  
        <bean id="userservice" class="com.test.UserServiceImplement">  
            <constructor-arg index="0" type="com.test.IUserDao"  
                ref="userdao"></constructor-arg>  
            <constructor-arg index="1" value="24"></constructor-arg>  
        </bean>  
    </beans>  

注重

    <construcotr-arg>标签中的index属性假如构造方法只有一个参数的时候可以不指定,它的下标从0开始,表示构造方法参数的索引,假如有构造方法有多个参数必须指定索引。除此之外还有一个type属性,这个属性用来指定被注入的参数的参数类型,一定要跟构造方法中的参数类型一致,假如是一个接口,那么也不答应传它的实现类,这是一个可选属性;
    假如构造函数的的参数类型是基本数据类型,那么就不用ref属性了,而用value属性设置它的值,而且这些数据类型会自动打包和解包;
    同样要注重bean的作用域问题。

 测试代码同上......

 第三种方式:通过java注解进行注入

 使用这种方式进行注入可以用两个标注:

    @Resource
    @Autowired

 两者的区别:1. @Resource标注是由JDK提供的,而@Autowired标注是由Spring提供的,因而@Autowired标注会与Spring紧密耦合,所以推荐使用@Resource标注;

             2. @Resource默认是按照名称来装配注入的,当找不到与名称匹配的bean才会按照类型来装配注入;

             3. @Autowired默认是按照类型装配注入的,假如想按照名称来转配注入,则需要结合@Qualifier一起使用;

             4. @Resource和@Autowired都可以用来标注字段或者setter方法。

 I.使用@Resource标注进行注入

Java代码

  package com.test;   
      
    import javax.annotation.Resource;   
      
    public class UserServiceImplement implements IUserService {   
      
        @Resource  
        private IUserDao user;   
      
        private IUserDao user1;   
      
        public IUserDao getUser1() {   
            return user1;   
        }   
      
        @Resource  
        public void setUser1(IUserDao user1) {   
            this.user1 = user1;   
        }   
      
        public void saveUser() {   
            user.addUser();   
            System.out.println("user注入成功");   
            user1.addUser();   
            System.out.println("user1注入成功");   
        }   
    }  


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-2.5.xsd   
               http://www.springframework.org/schema/context   
               http://www.springframework.org/schema/context/spring-context-2.5.xsd">  
        <context:annotation-config />  
      
        <bean id="user" class="com.test.UserDaoImplement"></bean>  
        <bean id="user1" class="com.test.UserDaoImplement"></bean>  
        <bean id="userservice" class="com.test.UserServiceImplement"></bean>  
    </beans>  

 测试类:

Java代码

   package com.test;   
      
    import org.springframework.context.ApplicationContext;   
    import org.springframework.context.support.ClassPathXmlApplicationContext;   
      
    public class Test {   
      
        public static void main(String[] args) {   
            ApplicationContext ctx = new ClassPathXmlApplicationContext(   
                    "com/test/bean.xml");   
            IUserService us = (IUserService) ctx.getBean("userservice");   
            us.saveUser();   
        }   
    }  

 II.使用@Autowired

 Java代码

  package com.test;   
      
    import org.springframework.beans.factory.annotation.Autowired;   
      
    public class UserServiceImplement implements IUserService {   
      
        @Autowired  
        private IUserDao user;   
      
        public IUserDao getUser() {   
            return user;   
        }   
      
        public void setUser(IUserDao user) {   
            this.user = user;   
        }   
      
        public void saveUser() {   
            user.addUser();   
            System.out.println("user注入成功");   
        }   
    }  
 
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-2.5.xsd   
               http://www.springframework.org/schema/context   
               http://www.springframework.org/schema/context/spring-context-2.5.xsd">  
        <context:annotation-config />  
      
        <bean id="user" class="com.test.UserDaoImplement"></bean>  
        <bean id="userservice" class="com.test.UserServiceImplement"></bean>  
    </beans>  

 测试类:

Java代码

package com.test;   
      
    import org.springframework.context.ApplicationContext;   
    import org.springframework.context.support.ClassPathXmlApplicationContext;   
      
    public class Test {   
      
        public static void main(String[] args) {   
            ApplicationContext ctx = new ClassPathXmlApplicationContext(   
                    "com/test/bean.xml");   
            IUserService us = (IUserService) ctx.getBean("userservice");   
            us.saveUser();   
        }   
    }  
分享到:
评论

相关推荐

    精通Spring2.5pdf书籍proSpring2.5

    《精通Spring2.5》是一本深度探讨Spring框架的权威指南,主要针对Spring 2.5版本进行深入解析。Spring是Java企业级应用开发中最受欢迎的框架之一,它以其轻量级、模块化的设计,以及对IoC(Inversion of Control,...

    Spring2.5-中文参考手册chm

    Spring2.5版本是该框架的一个重要里程碑,它在2008年发布,带来了许多新特性和改进,提升了开发者在构建应用程序时的灵活性和效率。 **依赖注入(DI)和控制反转(IoC)** Spring的核心特性之一是依赖注入(Dependency...

    spring2.5中文文档

    Spring 2.5版本是该框架的一个重要里程碑,引入了许多新特性并优化了已有的功能。以下是对Spring 2.5中文文档的主要内容进行的详细解释。 1. **依赖注入(DI)增强**:在Spring 2.5中,依赖注入进一步加强,支持了...

    spring2.5的所有jar包

    9. **事务管理**:Spring 2.5的事务管理支持包括编程式和声明式两种方式,可以在不侵入业务代码的情况下实现事务的控制。 10. **国际化(i18n)支持**:Spring 2.5提供了更好的国际化支持,使得应用可以轻松地根据...

    Spring2.5 源代码

    Spring 2.5在MVC方面有许多改进,包括对注解的支持,比如`@RequestMapping`、`@Controller`等,使得控制器的定义更加简洁。 7. **国际化(i18n)与本地化(l10n)**: Spring 2.5提供了强大的本地化支持,允许...

    spring 2.5框架图

    在Spring 2.5中,对Bean的元数据支持更丰富,包括属性、构造器、工厂方法等的注入方式,同时增强了对JSR-250注解的支持,如`@PostConstruct`和`@PreDestroy`。 4. **Web包**:Spring 2.5的Web模块提供了一个全面的...

    spring 2.5中文帮助文档

    通过阅读《Spring2.5-中文参考手册.chm》这份文档,开发者可以深入了解Spring 2.5的各种特性和用法,解决实际开发中遇到的问题,提升开发效率。文档不仅包含详细的API参考,还包含丰富的示例和最佳实践指导,是学习...

    spring 2.5依赖包

    1. **JDBC抽象层**:Spring 2.5改进了JDBC模板,提供了一种更简洁的方式来执行SQL查询,同时支持了JDBC批处理。 2. **ORM集成**:加强了对Hibernate、JPA、iBatis等ORM框架的集成,使得在Spring应用中使用这些框架...

    传智播客spring2.5源代码

    1. **依赖注入(Dependency Injection, DI)**:Spring 2.5进一步强化了DI这一核心概念,允许更加灵活的注解方式来声明依赖关系,如`@Autowired`、`@Qualifier`等。这使得开发者无需显式调用`set`方法来初始化对象,...

    struts2.1+spring2.5+hibernate3.3整合之第一步(spring2.5+hibernate3.3)

    Struts2.1、Spring2.5和Hibernate3.3是经典的Java企业级开发框架组合,它们各自在应用程序的不同层面提供了强大的支持。本篇将详细阐述这三个组件的整合过程,以及各自的核心特性。 首先,Struts2是一个基于MVC设计...

    Spring2.5-中文参考手册chm.zip

    这个"Spring2.5-中文参考手册chm.zip"文件包含了关于Spring 2.5版本的详细中文指南,对于学习和理解Spring框架具有很高的价值。 Spring框架的核心特性包括依赖注入(Dependency Injection,DI)、面向切面编程...

    Spring2.5 中文文档 chm格式

    除此之外,Spring2.5在MVC(Model-View-Controller)方面也有显著提升。Spring MVC是构建Web应用的重要部分,提供了处理HTTP请求、模型绑定、视图解析等功能。2.5版本引入了`@RequestMapping`注解,使得控制器方法与...

    spring2.5常用包

    Spring 2.5 是 Spring 框架的一个重要版本,它在之前的版本基础上引入了许多增强功能和改进,为开发者提供了更强大的工具...学习和掌握这些内容,将有助于你更好地利用 Spring 2.5 构建高效、可维护的 Java 应用程序。

    struts1.2 + spring2.5 + hibernate3.2框架demo

    Spring2.5是一个全面的后端应用管理框架,提供了依赖注入、AOP(面向切面编程)、数据访问等服务;Hibernate3.2则是一个对象关系映射(ORM)工具,简化了数据库操作。 首先,Struts1.2框架的核心是ActionServlet,...

    Spring 2.5 AOP 例子

    虽然Spring 2.5开始支持基于注解的配置,但XML配置仍然是一种常见且强大的方式。在AOP的上下文中,XML配置可以定义切面、通知(Advice)、切点(Pointcut)以及代理类型(Proxy Type)。以下是一些关键元素: 1. `...

    spring2.5需要的jar

    此外,还引入了`@Inject`注解,它是JSR-330的一部分,提供了一种标准的方式来实现依赖注入。 2. **AOP增强**: 在Spring 2.5中,面向切面编程(Aspect-Oriented Programming, AOP)也得到了加强。新增了`@Aspect`...

    spring2.5必备jar包

    首先,Spring 2.5的核心特性之一是依赖注入(Dependency Injection,DI)。依赖注入允许开发者在运行时通过配置文件或注解来管理对象之间的依赖关系,而不是在代码中硬编码。这提高了代码的可测试性、可维护性和松...

    spring2.5中文文档(PDF)

    1. **依赖注入增强**:Spring 2.5进一步完善了DI机制,支持注解驱动的配置,使得开发者可以在类和方法级别使用`@Autowired`、`@Qualifier`等注解进行依赖注入,减少了XML配置文件的使用。 2. **注解支持**:Spring ...

    Spring三种注入方式(三)

    本篇主要介绍Spring中的三种注入方式,包括构造器注入、设值注入和接口注入。 **一、构造器注入** 构造器注入是通过构造函数来传递依赖对象的一种方式。当类有多个构造函数时,Spring会使用带有最多参数的构造函数...

Global site tag (gtag.js) - Google Analytics