(转)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注解。
(转)java之Spring(IOC)注解装配Bean详解的更多相关文章
- java之Spring(IOC)注解装配Bean详解
在这里我们要详细说明一下利用Annotation-注解来装配Bean. 因为如果你学会了注解,你就再也不愿意去手动配置xml文件了,下面就看看Annotation的魅力所在吧. 先来看看之前的bean ...
- spring在IoC容器中装配Bean详解
1.Spring配置概述 1.1.概述 Spring容器从xml配置.java注解.spring注解中读取bean配置信息,形成bean定义注册表: 根据bean定义注册表实例化bean: 将bean ...
- Spring boot注解(annotation)含义详解
Spring boot注解(annotation)含义详解 @Service用于标注业务层组件@Controller用于标注控制层组件(如struts中的action)@Repository用于标注数 ...
- spring 通过注解装配Bean
使用注解的方式可以减少XML的配置,注解功能更为强大,它既能实现XML的功能,也提供了自动装配的功能,采用了自动装配后,程序员所需要做的决断就少了,更加有利于对程序的开发,这就是“约定优于配置”的开发 ...
- Spring通过注解装配Bean
通过注解实现ServiceImpl业务 一.使用@Component装配Bean 1. 定义类:User 在类上面加@Component注解,在属性上面加@Value值 package com.wbg ...
- Spring自动装配Bean详解
1. Auto-Wiring ‘no’ 2. Auto-Wiring ‘byName’ 3. Auto-Wiring ‘byType 4. Auto-Wirin ...
- Spring IoC componet-scan 节点解析详解
前言 我们在了解 Spring 容器的扩展功能 (ApplicationContext) 之前,先介绍下 context:componet-scan 标签的解析过程,其作用很大是注解能生效的关键所在. ...
- Spring中注解的使用详解
一:@Rsource注解的使用规则 1.1.案例演示 Spring的主配置文件:applicationContext.xml(因为我这里将会讲到很多模块,所以我用一个主配置文件去加载各个模块的配置文件 ...
- Spring各种注解标签作用详解
@Autowired和@Resource等注解是将Spring容器中的bean注入到属性,而@Component等注解是将bean放入Spring容器中管理. @Autowired spring2.1 ...
随机推荐
- 如何回滚请求<复制系统初始的数据>所处理的数据
一. 问题提出 请求名称:复制系统初始的数据 参数:空 问题: 今天早上财务实施人员新配置了一个OU,然后在跑复制系统初始的数据报表的时候,不小心,不输入参数就直接跑. 报表先是报错. 接下来的 ...
- React Native调试心得
在做React Native开发时,少不了的需要对React Native程序进行调试.调试程序是每一位开发者的基本功,高效的调试不仅能提高开发效率,也能降低Bug率.本文将向大家分享React Na ...
- 【IOS 开发】Object-C 入门 Xcode 环境详解
作者 : 韩曙亮 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/38424965 一. Xcode 环境安装 与 工程创建 1. ...
- 访问日志IO性能优化
在高并发量的场景下磁盘IO往往是性能的瓶颈所在,访问日志涉及到频繁的写操作,所以这部分要尽可能地优化,不然将拖累系统的整体性能.针对文件记录及数据库记录两种方式可以有以下措施提高写性能, l 避免频繁 ...
- MinerDB.java 数据库工具类
MinerDB.java 数据库工具类 package com.iteye.injavawetrust.miner; import java.sql.Connection; import java.s ...
- mac配置java环境
首先下载: 网址如下: http://www.oracle.com/technetwork/cn/java/javase/downloads/jdk7-downloads-1880260.html 配 ...
- Python学习笔记 - 列表生成式listComprehensions
#!/usr/bin/env python3 # -*- coding: utf-8 -*- list(range(1, 11)) # 生成1乘1,2乘2...10乘10 L = [] for x i ...
- python,os操作文件,文件路径(上一级目录)
python获取文件上一级目录:取文件所在目录的上一级目录 os.path.abspath(os.path.join(os.path.dirname('settings.py'),os.path.pa ...
- 【Matlab编程】哈夫曼编码的Matlab实现
在前年暑假的时候,用C实现了哈夫曼编译码的功能,见文章<哈夫曼树及编译码>.不过在通信仿真中,经常要使用到Matlab编程,所以为了方便起见,这里用Matlab实现的哈夫曼编码的功能.至于 ...
- 【翻译】提示18——如何决定ObjectContext的生命周期
原文地址:http://blogs.msdn.com/b/alexj/archive/2009/05/07/tip-18-how-to-decide-on-a-lifetime-for-your-ob ...