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

(转)java之Spring(IOC)注解装配Bean详解的更多相关文章

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

    在这里我们要详细说明一下利用Annotation-注解来装配Bean. 因为如果你学会了注解,你就再也不愿意去手动配置xml文件了,下面就看看Annotation的魅力所在吧. 先来看看之前的bean ...

  2. spring在IoC容器中装配Bean详解

    1.Spring配置概述 1.1.概述 Spring容器从xml配置.java注解.spring注解中读取bean配置信息,形成bean定义注册表: 根据bean定义注册表实例化bean: 将bean ...

  3. Spring boot注解(annotation)含义详解

    Spring boot注解(annotation)含义详解 @Service用于标注业务层组件@Controller用于标注控制层组件(如struts中的action)@Repository用于标注数 ...

  4. spring 通过注解装配Bean

    使用注解的方式可以减少XML的配置,注解功能更为强大,它既能实现XML的功能,也提供了自动装配的功能,采用了自动装配后,程序员所需要做的决断就少了,更加有利于对程序的开发,这就是“约定优于配置”的开发 ...

  5. Spring通过注解装配Bean

    通过注解实现ServiceImpl业务 一.使用@Component装配Bean 1. 定义类:User 在类上面加@Component注解,在属性上面加@Value值 package com.wbg ...

  6. Spring自动装配Bean详解

    1.      Auto-Wiring ‘no’ 2.      Auto-Wiring ‘byName’ 3.      Auto-Wiring ‘byType 4.      Auto-Wirin ...

  7. Spring IoC componet-scan 节点解析详解

    前言 我们在了解 Spring 容器的扩展功能 (ApplicationContext) 之前,先介绍下 context:componet-scan 标签的解析过程,其作用很大是注解能生效的关键所在. ...

  8. Spring中注解的使用详解

    一:@Rsource注解的使用规则 1.1.案例演示 Spring的主配置文件:applicationContext.xml(因为我这里将会讲到很多模块,所以我用一个主配置文件去加载各个模块的配置文件 ...

  9. Spring各种注解标签作用详解

    @Autowired和@Resource等注解是将Spring容器中的bean注入到属性,而@Component等注解是将bean放入Spring容器中管理. @Autowired spring2.1 ...

随机推荐

  1. Linux 之归档与压缩

    首先我们思考一下,归档和解压是一个概念吗?答案很明显不是啊,所谓归档,就是将一些文件归到一起,并没有对其进行压缩的操作.然而压缩则不同,见名知意.下面我们就来深入的研究一下这两个知识点吧! ----- ...

  2. TCP的定时器系列 — 零窗口探测定时器

    主要内容:零窗口探测定时器的实现. 内核版本:3.15.2 我的博客:http://blog.csdn.net/zhangskd 出现以下情况时,TCP接收方的接收缓冲区将被塞满数据: 发送方的发送速 ...

  3. java组播MulticastSocket

    在单播模式中有服务器端和客户端之分,而组播模式与单播模式不同,每个端都是以路由器或交换机做为中转广播站,任意一端向路由器或交换机发送消息,路由或交换机负责发送其他节点,每个节点都是同等的.所以在编程模 ...

  4. 03_Android项目中读写文本文件的代码

    编写一下Android界面的项目 使用默认的Android清单文件 <?xml version="1.0" encoding="utf-8"?> & ...

  5. How to Enable Trace or Debug for APIs executed as SQL Script Outside of the Applications ?

    In this Document   Goal   Solution   1: How do you enable trace for an API when executed from a SQL ...

  6. Java 开源Wiki:XWiki

    XWiki是一个由Java编写的基于LGPL协议发布的开源wiki和应用平台.之前只接触过MediaWiki,但是MediaWiki是用PHP写的,一直想找找看有没有熟悉的JAVA语言的Wiki系统. ...

  7. 【Qt编程】基于Qt的词典开发系列<一>--词典框架设计及成品展示

    去年暑假的时候,作为学习Qt的实战,我写了一个名为<我爱查词典>的词典软件.后来由于导师项目及上课等原因,时间不足,所以该软件的部分功能欠缺,性能有待改善.这学期重新拿出来看时,又有很多东 ...

  8. MySQL正则表达式初步

    如果想要了解完整的MySQL手册, 请访问: MySQL 5.1参考手册 你还可以学习: MySQL学习精粹 我们知道,在SQL之中,可以用 like 这个谓词(表达式) 来进行模糊检索,并支持 %, ...

  9. Boosting 和梯度Boosting

    Boosting方法: Boosting这其实思想相当的简单,大概是,对一份数据,建立M个模型(比如分类),一般这种模型比较简单,称为弱分类器(weak learner)每次分类都将上一次分错的数据权 ...

  10. navicat为mysql建立索引

    索引的目的是大大提高查询效率,还有读写效率. kettle向sql里面插入,更新时,也要建立索引,可以大大提升处理时间. 但是建立索引报错:Specified key was too long; ma ...