• (转)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

  • 相关阅读:
    为什么重写equals还要重写hashcode?
    谈谈关于Synchronized和lock
    springBoot为啥没有没有web.xml了
    springBoot整合mybatis开发
    springBoot的介绍与搭建
    Java i++原理及i=i++的问题说明
    Django学习笔记〇三——APP以及的文件结构
    Django学习笔记〇二——第一个Django项目
    Django学习笔记〇一——从web的概念引入
    MySQL学习笔记——〇六SQLAlchemy框架
  • 原文地址:https://www.cnblogs.com/Jolivan/p/8452322.html
Copyright © 2020-2023  润新知