zoukankan      html  css  js  c++  java
  • (转)java之Spring(IOC)注解装配Bean详解

    java之Spring(IOC)注解装配Bean详解

     

    在这里我们要详细说明一下利用Annotation-注解来装配Bean。

    因为如果你学会了注解,你就再也不愿意去手动配置xml文件了,下面就看看Annotation的魅力所在吧。

    先来看看之前的bean注解装配例子:

    复制代码
    package com.eco.service;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    import com.eco.dao.UserDao;
    import com.eco.model.User;
    @Service
    public class Userservice {
        //@Autowired
        private UserDao userdao;
    
        public void setUserdao(UserDao userdao) {
            this.userdao = userdao;
        }
    
        public void useradd(User newuser) {
            userdao.adduser(newuser);
        }
    }
    复制代码
    复制代码
    package com.eco.daoimp;
    import org.hibernate.Session;
    import org.hibernate.Transaction;import org.springframework.stereotype.Repository;
    import com.eco.hibernate.HibernateSessionFactory;
    import com.eco.dao.UserDao;
    import com.eco.model.User;
    @Repository
    public class Usertodo1 implements UserDao {
        public void adduser(User user) {
            Session session = HibernateSessionFactory.getSession();
            Transaction transaction = session.beginTransaction();
            session.save(user);
            transaction.commit();
            session.close();
            System.out.println("todo1 create the user");
        }
    }
    复制代码

    由于这里只是讲注解,为了让代码看得更加清晰,就省略了方法内部的注释。

    1.组件注解

    @controller 控制器(注入服务)

    @service 服务(注入dao)

    @repository dao(实现dao访问)

    @component (泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。)

    其实在Annotation设计之初,是定义了四个组件注解的,每个组件注解声明该组件的功能,但是由于某种原因,这些设计

    思想并未真正实现,以至于上面的四个组件注解都是一样的,没有任何区别;

    所以当你搞不清当前要注解的类到底是dao层,service层,还是controller层时,建议使用@component注解;

    或者说所有组件类都用@component注解,不然,万一dao层类你用了@service注解,虽然代码能够正常运行,但是明眼

    人一看就知道你不专业,连dao层和service层都搞不清。

    2.Autowired注解

    采用@Autowired注解的成员变量、setter方法、构造方法(对应依赖注入的接口注入、setter注入、构造器注入),会让

    Spring去做一件事:去所有@component注解的类里面找和我类型相同的,并装配到bean中,它默认是byType的,所以

    如果你为多个与之类型相同的类注解了@component,那么Spring就说:我找到了好多和你类型相同的,这下该怎么办啊。

    然后华丽丽地报错了。

    所以我们建议在使用组件注解时给它起个名字,方式为@component("eco"),如果不自定义的话,Spring默认为组件起个

    名字,这个名字就是该组件类名首字母小写。

    那么在@Autowired(name="eco"),这样显式地声明注入的组件名称为eco,就不会出错了,但是你别故意注入一个类型不

    匹配的,那就没意思了。

    3.Resource注解

    @Resource是一个比@Autowired注解功能更强大的注解,并且更易于理解;

    @Autowired(name="eco")========@Resource(name="eco"),这两种注解功能是一样的,都能实现往此处注入一个名为

    eco的类(资源)。

    如此一来,就可以实现几个注解来实现xml文件手动装配bean的的功能了。

    组件使用@Component注解,需要注入依赖(资源)就使用@Resource注解。

    来源:http://www.cnblogs.com/eco-just/p/7852230.html

  • 相关阅读:
    Lambda表达式、依赖倒置
    ASP.NET vNext 概述
    Uname
    RHEL4 i386下安装rdesktop【原创】
    Taxonomy of class loader problems encountered when using Jakarta Commons Logging(转)
    How to decompile class file in Java and Eclipse
    先有的资源,能看的速度看,不能看的,抽时间看。说不定那天就真的打不开了(转)
    Google App Engine 学习和实践
    【VBA研究】VBA通过HTTP协议实现邮件轨迹跟踪查询
    js正則表達式语法
  • 原文地址:https://www.cnblogs.com/Jolivan/p/8452322.html
Copyright © 2011-2022 走看看