• Spring备忘(涵盖Spring2.5)


    在Spring2.5中使用Annotation注解进行注入:

    在使用注解进行注入的时候需要设置配置文件的schema:

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

    </beans>

    并在配置文件中打开对Annotation的支持:

    <context:annotation-config></context:annotation-config>

    <bean id="userDAO" class="com.kay.bean.UserDAO"></bean>

    <bean id="userService" class="com.kay.bean.UserServices">

    </bean>

    使用@Autowired(不推荐)注解:

    修改UserService类:

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

    public class UserServices {

    @Autowired

    private UserDAO userDAO;

    public void setUserDAO(UserDAO userDAO) {

    this.userDAO = userDAO;

    }

    public void add(){

    userDAO.add();

    }

    }

    @Autowired注解可以加在属性之上,也可以加在set方法之上,该注解利用byType方式进行自动装配。

    如果存在多个匹配的Bean,就会抛出异常。如果要使用多个匹配的Bean中的一个那么可以使用@Qualifier注解:

    public class UserServices {

    @Autowired

    @Qualifier("userDAO")

    private UserDAO userDAO;

    public void add(){

    userDAO.add();

    }

    }

    那么就只会使用一个名称为userDAO的Bean进行注入。如果userDAO Bean不存在,那么Spring容器就会抛出异常。如果开发的时候,知道这个Bean有可能不存在,为了避免异常的出现,可以设置@Autowired注解的required属性为false。

    public class UserServices {

    @Autowired(required=false)

    @Qualifier("userDAO")

    private UserDAO userDAO;

    public void add(){

    userDAO.add();

    }

    }

    由于@Autowired注解和@Qualifier注解来自Spring的API,需要在我们的程序中耦合进Spring的代码,所以推荐使用下面的注解。

    使用@Resource注解:

    public class UserServices {

    @Resource

    private UserDAO userDAO;

    public void add(){

    userDAO.add();

    }

    }

    指定name属性:

    public class UserServices {

    @Resource(name="userDAO" )

    private UserDAO userDAO;

    }

    指定type属性:

    public class UserServices {

    @Resource(type=UserDAO.class)

    private UserDAO userDAO;

    }

    同时指定name和type属性:

    public class UserServices {

    @Resource(type=UserDAO.class,name="userDAO")

    private UserDAO userDAO;

    }

    @Resource属性同样可以应用在set方法之上。

    n 如果同时指定了name和type,则从Spring容器中找到唯一匹配的bean进行装配,找不到则抛出异常

    n 如果指定了name,则从容器中根据byName查找匹配的bean进行装配,找不到则抛出异常

    n 如果指定了type,则从容器中根据byType找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常

    n 如果既没有指定name,又没有指定type,则自动按照byName方式进行装配,如果没有匹配则通过byType方式进行匹配。

    注意,自动注入虽然可以减少配置文件的长度及体积,但是会带来很多未知的问题,比如上面按名称和按类型匹配的时候的约束及限制,所以不推荐使用自动注入。

  • 相关阅读:
    【转】Hive Data Manipulation Language
    【转】Vim显示中文乱码
    【转】Twitter算法面试题详解(Java实现)
    【转】判断单链表中是否存在环及查找环的入口点
    【转】SQL语句面试题
    【转】经典的SQL语句面试题
    【转】Java实现折半查找(二分查找)的递归和非递归算法
    【转】[IT综合面试]牛人整理分享的面试知识:操作系统、计算机网络、设计模式、Linux编程,数据结构总结
    【笔试/面试题】中科创达——9.28(持续更新ing)
    百度2014校园招聘笔试题(成都站,软件研发岗)——2014.09.21
  • 原文地址:https://www.cnblogs.com/kay/p/1456697.html
Copyright © 2020-2023  润新知