1.组件扫描

  Spring3.0后为我们引入了组件自动扫描机制,它可以在类路径底下寻找标注了@Component、@Service、@Controller、@Repository注解的类,并把这些类纳入进spring容器中管理。它的作用和在xml文件中使用bean节点配置组件是一样的。

A.开启注解扫描:base-package为需要扫描的包(含子包)

<context:component-scan base-package="com.web"></context:component-scan>

B.在组件bean上定义类注解,在组件bean的依赖属性上,定义依赖注解 

/**
* spring 注解扫描演示 bean
* @Component:通用组件
* @Scope : 设置组件的作用域
* prototype:该模式下会每次getBean都创建一个对象,并且都是延迟加载的
* @Lazy:设置组件是否延迟加载
* true为延迟加载 false为容器创建则立即加载bean
* @PostConstruct: 初始化方法注解
* @PreDestroy: 销毁方法注解
* @author Administrator
*/
 @Component
//@Scope("prototype")
@Lazy(true)
public class ExampleBean { public ExampleBean(){
System.out.println("ExampleBean 无参构造被调用。。。。。。");
} @PostConstruct
public void init(){
System.out.println("ExampleBean 初始化方法调用.....");
} @PreDestroy
public void destroy(){
System.out.println("ExampleBean 销毁方法调用......");
} }

注解下的类扫描和依赖注入

依赖关系的注解:

注意:

a.此类注解可以在属性上面设置,也可以在set方法上面设置

b.一般用于属性上,因为注解实现下set方法是可以省略不写的

c.下面的多个依赖注解,只需要使用一个Resource即可

/**
* Dao访问数据库
* @Repository:设置数据访问层的类级别注解
* @Resource: 用于引用类型属性的值注入 spring会先按属性名字从容器中查找是否有适合的bean
* 如果找不到,再按照类型查找是否有适合的bean,如果找到bean则注入进去,
* 如果找不到合适的bean,就会报bean不存在的异常 建议还是遵从默认规则
* name属性可以用于指定查找的bean的名字
*
* @author Administrator
*
*/
@Repository
public class EmpDaoImpl implements EmpDao{ @Resource/*(name="DbUtil")*/
private DbUtil dbUtil;//通过dbUtil 获取数据库连接
/**
* @Service :服务层的类级别注解
* @Autowired: 按照类型先查找,再按照名字找(避免两个同类型的bean的问题)
* @Qualifier("empDaoImpl") :指定容器查找的bean的名字
* @author Administrator
*
*/
@Service
public class EmpServiceImpl implements EmpService{ @Autowired
@Qualifier("empDaoImpl")
EmpDao empDao;//spring 容器中有EmpDaoImpl的对象存在,父类引用指向子类对象
 /*
*
*
* @Value: 用于注解注入值,可以给基本类型和字符串类型直接赋值 可以写在属性上,也可以写在setter上
* 依赖注入注解下,省略setter方法,直接将注解写在属性上即可
*/
@Component("DbUtil")
public class DbUtil {
//从配置文件中找到driver对应的值
@Value("#{props.driver}")
private String driver;
private String username;
@Value("#{props.password}")
private String password;
@Value("#{props.url}")
private String url;
public void setDriver(String driver) {
try {
Class.forName(driver);//加载驱动
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
this.driver = driver;
} @Value("#{props.username}")
public void setUsername(String username) {
this.username = username;
} }

<util:properties id="props" location="classpath:db.properties"></util:properties>

 /**
* @Controller: 设置控制层的类级别注解
* @Inject:标准注解,属于通用注解,该注解功能不属于spring的
* 用于设置属性注入,并且可以通过@Named指定从spring容器中查找的bean的名字
* @author Administrator
*
*/
@Controller
public class EmpController {
@Inject
EmpService empServiceImpl;

注解实现IOC和DI的更多相关文章

  1. Spring详解(四)------注解配置IOC、DI

    Annotation(注解)是JDK1.5及以后版本引入的.它可以用于创建文档,跟踪代码中的依赖性,甚至执行基本编译时检查.注解是以‘@注解名’在代码中存在的. 前面讲解 IOC 和 DI 都是通过 ...

  2. spring的IOC,DI及案例详解

    一:spring的基本特征 Spring是一个非常活跃的开源框架:它是一个基于Core来架构多层JavaEE系统的框架,它的主要目的是简化企业开发.Spring以一种非侵入式的方式来管理你的代码,Sp ...

  3. Spring MVC -- Spring框架入门(IoC和DI)

    Spring MVC是Spring框架中用于Web应用开发的一个模块.Spring MVC的MVC是Model-View-Controller的缩写.它是一个广泛应用于图像化用户交互开发中的设计模式, ...

  4. sping IOC和DI 初始化和关系

    springIOC和spring DI作为spring core的核心思想,有必要学习下才能更好的使用spring ========================================== ...

  5. Spring IOC(DI)

    软件152 余建强 1 什么是IOC IOC—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想.在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不 ...

  6. spring常用注解以IOC理解

    使用注解来构造IoC容器 用注解来向Spring容器注册Bean.需要在applicationContext.xml中注册<context:component-scan base-package ...

  7. IOC和DI,AOP的本质理解

    IOC: Inversion of Control,控制反转, 控制权从应用程序转移到框架(如IOC容器),是框架共有的特性. 对于IOC的理解,可以把IOC看作是一个生产和管理bean对象的容器.原 ...

  8. 用IDEA详解Spring中的IoC和DI(挺透彻的,点进来看看吧)

    用IDEA详解Spring中的IoC和DI 一.Spring IoC的基本概念 控制反转(IoC)是一个比较抽象的概念,它主要用来消减计算机程序的耦合问题,是Spring框架的核心.依赖注入(DI)是 ...

  9. 理解Spring中的IoC和DI

    什么是IoC和DI IoC(Inversion of Control 控制反转):是一种面向对象编程中的一种设计原则,用来减低计算机代码之间的耦合度.其基本思想是:借助于"第三方" ...

随机推荐

  1. 树莓派3B+学习笔记:12、安装FireFox浏览器

    1.在终端中输入 sudo apt-get install iceweasel 2.安装完成后菜单中会自动生成快捷方式 什么是 iceweasel? Iceweasel 是 Firefox(火狐浏览器 ...

  2. 用例程解释create_singlethread_workqueue与create_workqueue的区别

    用例程解释create_singlethread_workqueue与create_workqueue的区别 系统版本:linux3.4 使用create_singlethread_workqueue ...

  3. ruby安装devkit

    双击下载文件,指定解压路径,路径中不能有空格.如C:\DevKit,这个路径就是<DEVKIT_INSTALL_DIR>. > cd <DEVKIT_INSTALL_DIR&g ...

  4. Python学习笔记十一:模块

    标准库(内置模块) time与datetime 模块 时间表示方式 1.时间戳 2.格式化的字符串 3.元组形式 时间戳就是一个秒数 x=time.time(),从1970年1月1日0时0分0秒到现在 ...

  5. leetcode记录-反转整数

    给定一个 32 位有符号整数,将整数中的数字进行反转. 示例 1: 输入: 123 输出: 321 示例 2: 输入: -123 输出: -321 示例 3: 输入: 120 输出: 21 注意: 假 ...

  6. IEC的PLC编程语言标准 IEC61131-3

    IEC的PLC编程语言标准(IEC61131–3) 中有5种编程语言:1)顺序功能图(Sequential function chart) :2)梯形图(Ladder diagram):3)功能块图( ...

  7. Ruby 配置vimrc

    https://ruby-china.org/topics/19315 mv ~/Downloads/vim-distinguished-develop/colors/*.vim ~/.vim/col ...

  8. WPF ControllTemplate Triggers小记 - 简书

    原文:WPF ControllTemplate Triggers小记 - 简书 WPF中,样式模板中如果定义EventTrigger事件方式实现动画.那么需要注意两点: 1.对于绑定的属性的Event ...

  9. java 文件过滤

    public class TestFileio { public static void main(String[] args) { File file = new File("D:/upl ...

  10. Drupal views 中合并显示字段

    如图, 需要显示如下数据表格 表格的第三列是由两个字段组成的.分别是title 标题字段和body 内容字段. 默认情况下,一列只显示一个字段.如何同时显示两个呢? 这个问题难不到强大的views,要 ...