1. 环境搭建

1.1 导入所需 jar 包

  • 引入 IOC 容器必须的6个jar包;
  • spring-aop-4.3.10.RELEASE.jar, Spring 框架的AOP的jar包;

1.2 创建对应的包结构,编写Java的类

  • UserService: 接口;
  • UserServiceImpl: 具体的实现类;

1.3 在src目录下,创建 applicationContext.xml 配置文件

// 此处引入的约束发生变化,需要引入 context 的约束
<?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"
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.xsd"> <!-- 开启注解的扫描 -->
<context:component-scan base-package="com.itheima.demo"/> <!-- 也可以采用如下配置, 表示扫描 com.itheima 包下所有的内容 -->
<context:component-scan base-package="com.itheima"/>
</beans>

1.4 在具体的实现类上,添加注解

// 组件注解, 标记类
// <bean id="userService" class="com.itheima.demo.UserServiceImpl"/>
// value 表示该实现类的别名
@Component(value="userService")
public class UserServiceImpl implements UserService{
public void sayHello(){
System.out.println("hello world!");
}
}

1.5 编写测试程序

public class Demo{
public void fun(){ // 创建工厂,加载配置文件
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); // 通过工厂获得对象
// "userService" 对应注解中 value 的值
UserService us = (UserService)ac.getBean("userService");
us.sayHello();
}
}

2. Spring 框架中 Bean 管理的常用注解

  1. @Component: 作用在类上;
  2. @Component的三个衍生注解,功能暂时是一致的:
    • @Controller: 作用在 Web 层;
    • @Service: 作用在业务层;
    • @Repository: 作用在持久层;
  3. 属性注入的注解
    • 使用注解进行依赖注入,可以不用提供set方法;
    • @Value用于注入普通类型;
    • @Autowired: 用于注入对象类型,默认按类型进行自动装配;
    • @Qualifier: 用于注入对象类型,强制使用名称注入;(与 @Autowired 一起使用)
    • @Resource: 相当于@Autowired@Qualifier一起使用;
// 示例
public void UserServiceImpl{ // 给 name 属性注入"张三"的字符串
@Value(value="张三")
private String name; // 从 IOC 容器中查找 UserDao 接口的实现类
@Autowired
private UserDao userDao; // 从 IOC 容器中查找 UserDao 的实现类且名称为 ud
@Autowired
@Qualifier(value="ud") // 按名称注入
private UserDao userDao; // 该注解是由Java 提供的,在 javax.annotation.Resource 包下, Spring 框架支持该注解
@Resource(name="ud")
private UserDao userDao; public void sayHello(){
System.out.println("Hello world"+name); // 调用 userDao 实现类中的方法
userDao.save();
}
} @Repository(value="ud")
public void UserDaoImpl{
public void save(){
System.out.println("保存用户..");
}
}

3. Bean 的作用范围和生命周期的注解

  1. Bean 的作用范围注解: @Scope(value="singleton")

    • singleton: 单例,默认值;
    • prototype: 多例;
  2. Bean 的生命周期注解(了解)
    • @PostConstruce: 相当于 init-method;
    • @PreDestory: 相当于 destroy-method;

参考资料

Spring 的IOC容器之注解的方式的更多相关文章

  1. Java进阶知识16 Spring创建IOC容器的两种方式

    1.直接得到 IOC 容器对象 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("app ...

  2. 好莱坞原则—Spring的IOC容器

    IOC容器的概念,之前在学习SSH的时候,就有接触过.但那时候也仅仅是知道这么个概念,认为它非常难理解.事实上并非它难理解,而是我并没有停下来好好对它总结梳理过. IOC(Inversion of C ...

  3. spring IOC容器实例化Bean的方式与RequestContextListener应用

    spring IOC容器实例化Bean的方式有: singleton 在spring IOC容器中仅存在一个Bean实例,Bean以单实例的方式存在. prototype 每次从容器中调用Bean时, ...

  4. Spring之IOC容器加载初始化的方式

    引言 我们知道IOC容器时Spring的核心,可是如果我们要依赖IOC容器对我们的Bean进行管理,那么我们就需要告诉IOC容易他需要管理哪些Bean而且这些Bean有什么要求,这些工作就是通过通过配 ...

  5. Spring扩展:Spring的IoC容器(注入对象的方式和编码方式)

    二.Spring的IoC容器 IoC:Inversion of Control(控制反转) DI:Dependency Injection(依赖注入) 三.依赖注入的方式 (1)构造注入 (2)set ...

  6. spring学习笔记三:Component注解(把POJO类实例化到spring的IOC容器中)

    Component注解:把普通的POJO 类实例化到spring的IOC容器中,就是定义成<bean id="" class=""> 项目目录树: ...

  7. Spring框架IOC容器和AOP解析

    主要分析点: 一.Spring开源框架的简介  二.Spring下IOC容器和DI(依赖注入Dependency injection) 三.Spring下面向切面编程(AOP)和事务管理配置  一.S ...

  8. spring框架--IOC容器,依赖注入

    思考: 1. 对象创建创建能否写死? 2. 对象创建细节 对象数量 action  多个   [维护成员变量] service 一个   [不需要维护公共变量] dao     一个   [不需要维护 ...

  9. spring之IOC容器创建对象

    1.术语了解 1.1组件/框架设计 侵入式设计 引入了框架,对现有的类的结构有影响:即需要实现或继承某些特定类. 例如: Struts框架非侵入式设计 引入了框架,对现有的类结构没有影响. 例如:Hi ...

随机推荐

  1. SQL server账号无法登陆

  2. Python内置函数之repr()

    repr(object) 返回对象的字符串形式. >>> a = 'hello' >>> repr(a) "'hello'" 返回的字符串形式可 ...

  3. ASP.NET Web API 使用Swagger生成在线帮助测试文档,支持多个GET

    以下为教程: 在现有webapi项目中,nuget安装以下两个插件 swagger.net.ui swashbuckle 安装完毕后可以卸载Swagger.NET,此处不需要! 安装完毕后屏蔽以下代码 ...

  4. love2d教程33--window模块

    --love的window模块比较简单,直接贴代码了function love.load() io.stdout:setvbuf("no") -- 设置io为无缓存模式 --获取显 ...

  5. 【iOS越狱开发】如何将应用打包成.ipa文件

    在项目开发中,我们常常需要将工程文件打包成.ipa文件,提供给越狱的iphone安装. 下面是一种方法: 1.首先应该给工程安装好配置文件(这里不再敖述),在ios device的状态下,运行成功. ...

  6. python之函数cmp

    cpm函数是内置函数.可直接调用. cmp(x,y) 函数用于比较2个对象,如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1. 但是,sorted ...

  7. Exercise:Sparse Autoencoder

    斯坦福deep learning教程中的自稀疏编码器的练习,主要是参考了   http://www.cnblogs.com/tornadomeet/archive/2013/03/20/2970724 ...

  8. 嵌入式开发之davinci--- MSB和LSB

    简介: MSB是Most Significant Bit的缩写,最高有效位.在二进制数中,MSB是最高加权位.与十进制数字中最左边的一位类似.通常,MSB位于二进制数的最左侧,LSB位于二进制数的最右 ...

  9. PHP 清除HTML代码、空格、回车换行符的函数

    function DeleteHtml($str) { $str = trim($str); $str = strip_tags($str,""); $str = ereg_rep ...

  10. ASP.NET动态添加控件一例

    第一次单击页面中有3个Label,第二次单击有6个,第三次单击有9个,也就是每次单击要在上次的状态下再添加3个. 我的方法是,可以通过Session来保存上次的状态,一种解法如下: Test.aspx ...