Spring应用注解配置实现IOC

一、组件自动扫描

可以按指定的包路径,将包下所有组件扫描,如果发现组件类定义前有以下标记,就会将组件扫描到容器。

@Component 其他组件

@Controller  控制层组件

@Service  业务层组件  XXXService

@Repository  数据访问层组件 XXXDao

@Named (不是Spring中定义的,需要引入第三方标准包)

组件自动扫描需要我们手动开启,开启方式即在applicationContext.xml中添加以下配置:

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

例如:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:util="http://www.springframework.org/schema/util"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-4.0.xsd
    http://www.springframework.org/schema/util
    http://www.springframework.org/schema/util/spring-util-4.0.xsd" >

    <!-- 开启组件扫描 -->
    <context:component-scan base-package="com.zlc.test"/>
</beans>

base-package属性说明:例如其值为com.zlc.test,即指定spring框架将对com.zlc.test包下以及子包下所有组件进行扫描。

这样我们就可以在该包路径下写相关的组件了,Spring框架将对其进行自动扫描:例如:

package com.zlc.test;

import org.springframework.stereotype.Component;

@Component//扫描ExampleBean组件,默认id=exampleBean
public class ExampleBean {

    public void execute() {
        System.out.println("执行了方法");
    }
}

如果我们不想使用默认的id名,我们也可以这样为其指定特定的id名:

@Component("example")//指定id=example
public class ExampleBean {

    public void execute() {
        System.out.println("执行了方法");
    }
}

我们还可以像在xml文件中配置一样,指定该组件的某些属性,例如:scope, init-method, destroy-method, lazy-init等

例如:

//等价于指定<bean id="example">
@Component("example")
//等价于指定<bean scope="prototype">
@Scope("prototype")
//等价于指定<bean lazy-init="true">
@Lazy(true)
public class ExampleBean {

    //等价于<bean init-method="init">
    @PostConstruct
    public void init() {
        System.out.println("初始化。。。");
    }

    //等价于<bean destroy-method="destroy">
    @PreDestroy
    public void destroy() {
        System.out.println("释放资源。。。");
    }

    public void execute() {
        System.out.println("执行了方法");
    }
}

二、注解方式实现注入

(1)使用@Resource注解进行注入,注解可以加在需要注入的属性上,也可以加在相应的setter方法上

例如:

@Component("s")
public class Student {
    //定义在变量上
    @Resource
    private Computer c;

    private Phone p;

    public void setC(Computer c) {
        this.c = c;
    }
    //定义在setter方法上
    @Resource
    public void setP(Phone p) {
        this.p = p;
    }

    public void show() {
        System.out.println("学生信息。。。");
        c.show();
        p.show();
    }
}

(2)使用@Autowired注解进行注入,注解可以加在需要注入的属性上,也可以加在相应的setter方法上

例如:

@Component("s")
public class Student {
    //定义在变量上
    @Autowired
    private Computer c;

    private Phone p;

    public void setC(Computer c) {
        this.c = c;
    }
    //定义在setter方法上
    @Autowired
    public void setP(Phone p) {
        this.p = p;
    }

    public void show() {
        System.out.println("学生信息。。。");
        c.show();
        p.show();
    }
}

注意:我们甚至还可以去掉这两个属性的setter方法,直接在属性上添加@Resource或者@Autowired注解,这样也是可以完成注入的

例如:

@Component("s")
public class Student {
    //定义在变量上
    @Autowired
    private Computer c;
    @Autowired
    private Phone p;

    public void show() {
        System.out.println("学生信息。。。");
        c.show();
        p.show();
    }
}

使用@Resourse或者@Autowired注解方式进行注入的时候,默认使用的是"byName"的匹配方法,使用的是默认名称(即需要注入的属性的名称),如果"byName"的匹配方法找不到相应的组件,则会使用"byType"的匹配方法寻找相应的组件。

特别的,我们可以指定特定名称的组件进行注入

例如:

    @Autowired
    @Qualifier("p1")//指定id名称为p1的组件进行注入
    private Phone p;

或者

    @Resource(name="p1")//指定id名称为p1的组件进行注入
    private Phone p;

一般使用时,@Resource注解和@Autowired注解可以看做是等价的。

原文地址:https://www.cnblogs.com/zlingchao/p/9409220.html

时间: 2024-08-07 10:44:19

Spring应用注解配置实现IOC的相关文章

Spring MVC注解配置结合Hibernate的入门教程及其代码实例

原文:Spring MVC注解配置结合Hibernate的入门教程及其代码实例 源代码下载地址:http://www.zuidaima.com/share/1787210045197312.htm 1.概述 本文旨在搭建Spring MVC+Hibernate开发框架,通过一个简单的demo讲解Spring MVC的相关配置文件,以及通过注解方式实现简单功能. 开发框架:Spring+Spring MVC+Hibernate(Spring所用的版本为3.0.5). 数据库:MySQL(数据库名称

Spring使用注解配置依赖注入

大部分情况下,使用Spring配置依赖注入时,都是使用注解来进行配置,因为注解比xml要方便和简单.不过类似于数据源对象这种配置信息容易变更的对象除外,这种对象使用xml文件来进行配置会更适合,方便于在外部进行修改,而不需要打开代码来进行修改. 接下来简单介绍一下注解的配置方式,首先要让Spring支持注解,编辑Spring配置文件内容如下: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=&

Spring AOP 注解配置实例

Spring AOP注解例子 一:导入相关jar包. 首先导入Spring的相关包(这里就不多说了,我这里是3.2.4版本的) 然后导入AOP注解的相关包(不是spring的包)aspectjrt-1.6.7.jar和aspectjweaver-1.6.8.jar和aopalliance.jar (注意这里最好是1.6.7以上的版本,不然容易出错,折腾了我好久,最后才发现是包的版本问题. 所以这里一定要注意,spring 2.0以后的最好是用1.6.7的版本) 二: 建一个class类作为切入面

关于spring中注解配置的问题

今天写spring的时候,想用注解配置,但不巧的是用Junit工具测试的时候出错了,检查了很久的代码,发现并不是代码的问题,那就有些奇怪了. 后来去百度,回答的奇奇怪怪,和我的问题沾边的不多,最后还是FQ找到的答案,废话不多说,先贴出错误提示: org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from class path resou

【spring 事务注解配置】事务回滚

注解配置参考: http://www.cnblogs.com/younggun/archive/2013/07/16/3193800.html 自己测试发现事务没成功,原因是 我测试的表是myisam 存储引擎.myisam不支持事务,一个坑 了我! myisam 和 innodb对比 http://www.cnblogs.com/merlini/p/4079313.html

Spring(四)注解配置Ioc

原文链接:http://www.orlion.ga/216/ 一.@Autowired beans.xml配置成如下: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"      xmlns:xsi="http://www.w3.org/2001/XMLSchema-inst

Spring通过注解配置Bean

@Component: 基本注解, 标识了一个受 Spring 管理的组件@Repository: 标识持久层组件@Service: 标识服务层(业务层)组件@Controller: 标识表现层组件 配置文件 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi=&qu

spring+hibernate注解配置实例

简单的spring3.2.9和hibernate3的集成配置,有demo供下载.shTest下载 第一步 jdbc.properties配置 driverClassName=com.mysql.jdbc.Driver url=jdbc\:mysql\://localhost\:3306/shtest username=root password=123456 prototypeCount=1 maxActive=100 houseKeepingSleepTime=60000 minimumCon

spring Aop注解配置

①<!-- 启用AOP --> <aop:aspectj-autoproxy></aop:aspectj-autoproxy> ②<!-- 配置扫描标注注解的包 --> <context:component-scan base-package="com.tz.spring.dao,com.tz.spring.service,com.tz.spring.advice"></context:component-scan>