zoukankan      html  css  js  c++  java
  • spring2.5注入学习

    好久没有碰java了,今晚有空看了看spring2.5的anntation注入 确实方便好用,今日好好学习一下

    导入所需jar包

     spring.jar
     asm-2.2.2.jar (*)
     asm-commons-2.2.2.jar (*)
     asm-util-2.2.2.jar (*)
     cglib-nodep-2.1_3.jar (*)

    commons-logging.jar

    此处顺便说说其他那两个框架的基本包

     struts2必须JAR包(6个):
     struts2-spring-plugin-2.0.11.2.jar
     xwork-2.0.5.jar
     struts2-core-2.0.11.2.jar
     freemarker-2.3.8.jar
     ognl-2.6.11.jar
     commons-logging-1.0.4.jar(与hibernate3.2必须JAR包重复,取一个既可)

    hibernate3.2必须JAR包(8个):
     antlr-2.7.6.jar
     commons-collections-2.1.1.jar
     commons-logging-1.0.4.jar
     dom4j-1.6.1.jar
     ehcache-1.2.3.jar
     hibernate3.jar
     jta.jar
     log4j-1.2.11.jar

    此处我们只用spring2.5 的包

    项目结构(以下都是模仿形式我实际操作)

    org.dao.interfaces.IUser

    org.dao.UserImpl

    org.service.UserService

    org.test.TestClass

    package org.dao.interfaces;

    /**
     *@author:张奇峰
     *2009-6-10 下午08:35:19
     */
    public interface IUser {
      
     public void save(String userName);
     
     public void delete(int id);
    }

    package org.dao;

    import org.dao.interfaces.IUser;

    /**
     *@author:张奇峰
     *2009-6-10 下午08:38:12
     */
    public class UserImpl implements IUser {

     public void delete(int id) {
      // TODO Auto-generated method stub

     }

     public void save(String userName) {
             System.out.println("用户"+userName+"保存成功!");
     }

    }

    package org.service;

    import javax.annotation.Resource;

    import org.dao.interfaces.IUser;

    /**
     *@author:张奇峰
     *2009-6-10 下午08:37:04
     */
    public class UserService {
       

    //这就是注释   
     @Resource
     public IUser userOperate=null;

     public void setUserOperate(IUser userOperate) {
      this.userOperate = userOperate;
     }
     
     public void save(String userName)
     {
      userOperate.save(userName);
     }
    }


     

    bean.xml

    <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:tx="http://www.springframework.org/schema/tx"
     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
         ">

        <!--  这一句很重要!告诉spring容器进行注解注入-->
         <context:annotation-config/>
         <bean id="userimpl" class="org.dao.UserImpl"></bean>
         <bean id="userService" class="org.service.UserService"></bean>
     </beans>

    package org.test;
    import org.junit.*;
    import org.service.UserService;
    import org.springframework.context.support.AbstractApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    /**
     *@author:张奇峰
     *2009-6-10 下午08:38:26

    *单元测试
     */
    public class TestClass {

     @Test
     public void test() throws Exception {
      
      AbstractApplicationContext context=new ClassPathXmlApplicationContext("bean.xml");
      UserService service=(UserService)context.getBean("userService");
      service.save("zhanqsan");
      context.close();
     }
    }

    执行输出:用户zhanqsan保存成功!

    类似于@Resource的还有@Autowired,两个注解的区别是:
    @Autowired默认按类型装配,@Resource默认按名称装配,当找不到名称匹配的bean才会按类型装配。

    @Autowired也可以按名称进行装配

    例如如上 @Autowired @Qualifier("userService") 效果是一样的!

    在classpath 自动扫描方式把组件纳入spring容器中管理

    这个也是比较OK的 个人比较喜欢的!可以一定程度上摆脱配置文件

     


     

    spring2.5引入了组件自动扫描机制,可以在类路径底下寻找标注了@Component @Service @Controller @Repository
    注解的类,并将这些类纳入进spring容器中管理。它们的作用和xml文件中使用bean 节点配饰组件是一样的。
    (1)使用到了注解的功能(需要注解准备工作的内容)
    (2)在xml中加入
    <context:component-scan base-package="org" /><!--org下的包及其子包-->
    其中base-package 为需要扫描的包(包含子包)
    (3)
    @Service用于标注业务逻辑层组件
    @Controller用于标注控制层组件(如struts中的action)
    @Repository用于标注数据访问组件 ,即DAO 组件
    @Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注,比如说切面类,其它。。。

    测试:

    package org.dao;

    import org.dao.interfaces.IUser;
    import org.springframework.stereotype.Repository;

    /**
     *@author:张奇峰
     *2009-6-10 下午09:56:15
     */

    //标注为DAO组件


    @Repository
    public class UserImpl2 implements IUser {

     public void delete(int id) {
      // TODO Auto-generated method stub

     }

     public void save(String userName) {
             System.out.println("保存"+userName+"成功!haha!");
     }

    }

    package org.service;

    import javax.annotation.Resource;

    import org.dao.interfaces.IUser;

    /**
     *@author:张奇峰
     *2009-6-10 下午08:37:04
     */
    public class UserService {
       

    //注入的名称默认是类的名称且首字母小写
     @Resource(name="userImpl2")  
     public IUser userOperate=null;

     public void setUserOperate(IUser userOperate) {
      this.userOperate = userOperate;
     }
     
     public void save(String userName)
     {
      userOperate.save(userName);
     }
    }

    在beam.xml 中添加

       <context:component-scan base-package="org"/>

    另外无需改动  输出结果为:保存zhanqsan成功!haha!     正是所预料的一般


     

  • 相关阅读:
    ckplayer不支持谷歌92版本,flashplayer不支持m3u8的方案
    git merge 失败
    在SuperSocket中使用Unity注入
    在WPF中集成SuperSocket 2.0
    在WPF中打印A4纸
    使用 HoloLens 仿真器
    C# 优化内存和运行效率
    Redis 高可用篇:你管这叫 Sentinel 哨兵集群原理
    Redis 核心篇:唯快不破的秘密
    Redis 日志篇:无畏宕机快速恢复的杀手锏
  • 原文地址:https://www.cnblogs.com/zhangqifeng/p/1500888.html
Copyright © 2011-2022 走看看