`
dw008
  • 浏览: 19958 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Spring2.5注入方式

阅读更多
Spring2.5依靠注入的方式有三种:

通过setter方法注入;
通过构造方法注入;
通过注解进行注入;
第一种方式:通过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();   
    }   


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 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> 

<?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();   
    }   


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);   
    }   


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> 

<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注入成功");   
    }   


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> 

<?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();   
    }   


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注入成功");   
    }   


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> 

<?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();   
    }   


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的所有jar包

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

    spring2.5中文文档

    1. **依赖注入(DI)增强**:在Spring 2.5中,依赖注入进一步加强,支持了基于注解的配置。开发者可以使用`@Autowired`、`@Qualifier`和`@Resource`等注解来简化装配过程,无需编写XML配置文件。 2. **注解驱动的开发...

    Spring2.5 源代码

    在Spring 2.5中,DI的实现更加完善,支持了注解驱动的依赖注入,使得代码更简洁、更易于测试。 2. **注解支持**: Spring 2.5大幅扩展了对Java注解的支持,包括`@Autowired`、`@Qualifier`、`@Required`等,这些...

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

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

    spring 2.5框架图

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

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

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

    spring 2.5中文帮助文档

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

    传智播客spring2.5源代码

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

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

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

    spring 2.5依赖包

    1. **依赖注入 (Dependency Injection, DI)**:Spring 2.5对依赖注入进行了优化,支持了基于注解的配置(@Autowired和@Qualifier),这使得开发者无需通过XML配置就能实现组件之间的依赖关系,提高了代码的可读性...

    spring2.5中文文档(PDF)

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

    spring2.5常用包

    1. **IoC(Inversion of Control)容器**:Spring 的核心特性是依赖注入(Dependency Injection,DI),通过 IoC 容器来管理对象的生命周期和对象之间的依赖关系。IoC 容器通过 XML 配置文件或注解(如 @Autowired)...

    spring2.5必备jar包

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

    spring2.5需要的jar

    在压缩包"spring2.5需要的jar"中,可能包含了一系列Spring框架的核心库,如spring-core、spring-context、spring-aop、spring-beans、spring-expression等。这些jar文件是构建基于Spring 2.5的应用所必需的,它们...

    spring 2.5 api chm(英文正宗不骗人,喜欢就下)

    2. **JSR-303 Bean Validation集成**:Spring 2.5开始支持JSR-303标准,提供了对Bean验证的支持,允许开发者通过注解的方式定义和执行对象属性的验证规则。 3. **Spring Expression Language (SpEL)**:Spring 2.5...

    spring2.5 mvc 完整项目

    在Spring 2.5版本中,这个框架已经相当成熟,提供了丰富的特性,如依赖注入、数据绑定、异常处理等,帮助开发者高效地实现业务逻辑与视图层的分离。 二、错误信息配置 错误信息配置在Spring MVC项目中扮演着关键...

    传智播客 spring2.5源代码_lib包

    这个"传智播客 spring2.5源代码_lib包"包含了Spring框架2.5版本的库文件,这些库文件对于理解Spring的工作原理、学习如何使用它以及进行相关开发非常有帮助。下面我们将深入探讨Spring 2.5的一些核心概念和功能。 1...

Global site tag (gtag.js) - Google Analytics