Spring 的IOC容器之注解的方式
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 管理的常用注解
@Component: 作用在类上;@Component的三个衍生注解,功能暂时是一致的:@Controller: 作用在 Web 层;@Service: 作用在业务层;@Repository: 作用在持久层;
- 属性注入的注解
- 使用注解进行依赖注入,可以不用提供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 的作用范围和生命周期的注解
- Bean 的作用范围注解:
@Scope(value="singleton")- singleton: 单例,默认值;
- prototype: 多例;
- Bean 的生命周期注解(了解)
@PostConstruce: 相当于 init-method;@PreDestory: 相当于 destroy-method;
参考资料
Spring 的IOC容器之注解的方式的更多相关文章
- Java进阶知识16 Spring创建IOC容器的两种方式
1.直接得到 IOC 容器对象 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("app ...
- 好莱坞原则—Spring的IOC容器
IOC容器的概念,之前在学习SSH的时候,就有接触过.但那时候也仅仅是知道这么个概念,认为它非常难理解.事实上并非它难理解,而是我并没有停下来好好对它总结梳理过. IOC(Inversion of C ...
- spring IOC容器实例化Bean的方式与RequestContextListener应用
spring IOC容器实例化Bean的方式有: singleton 在spring IOC容器中仅存在一个Bean实例,Bean以单实例的方式存在. prototype 每次从容器中调用Bean时, ...
- Spring之IOC容器加载初始化的方式
引言 我们知道IOC容器时Spring的核心,可是如果我们要依赖IOC容器对我们的Bean进行管理,那么我们就需要告诉IOC容易他需要管理哪些Bean而且这些Bean有什么要求,这些工作就是通过通过配 ...
- Spring扩展:Spring的IoC容器(注入对象的方式和编码方式)
二.Spring的IoC容器 IoC:Inversion of Control(控制反转) DI:Dependency Injection(依赖注入) 三.依赖注入的方式 (1)构造注入 (2)set ...
- spring学习笔记三:Component注解(把POJO类实例化到spring的IOC容器中)
Component注解:把普通的POJO 类实例化到spring的IOC容器中,就是定义成<bean id="" class=""> 项目目录树: ...
- Spring框架IOC容器和AOP解析
主要分析点: 一.Spring开源框架的简介 二.Spring下IOC容器和DI(依赖注入Dependency injection) 三.Spring下面向切面编程(AOP)和事务管理配置 一.S ...
- spring框架--IOC容器,依赖注入
思考: 1. 对象创建创建能否写死? 2. 对象创建细节 对象数量 action 多个 [维护成员变量] service 一个 [不需要维护公共变量] dao 一个 [不需要维护 ...
- spring之IOC容器创建对象
1.术语了解 1.1组件/框架设计 侵入式设计 引入了框架,对现有的类的结构有影响:即需要实现或继承某些特定类. 例如: Struts框架非侵入式设计 引入了框架,对现有的类结构没有影响. 例如:Hi ...
随机推荐
- atitit.jndi的架构与原理以及资源配置and单元测试实践
atitit.jndi的架构与原理以及资源配置and单元测试实践 1. jndi架构 1 2. jndi实现原理 3 3. jndi资源配置 3 3.1. resin <database> ...
- [svc][op]pip安装ansible && yum安装python34
相对yum安装,pip安装的好处是jinjia版本到了2.8 pip安装ansible Successfully installed MarkupSafe-1.0 PyYAML-3.12 ansibl ...
- ubuntu下记录所有用户的登录和操作日志
一般我们可以用history命令来查看当前用户的操作记录,但是这个命令不能记录是所有用户登录操作的,也不能记录详细的操作时间,且不完整:所以误操作而造成重要的数据丢失,就很难查到是谁操作导致的. 在这 ...
- 关于linux PPA源问题
添加PPA: 1.首先进入ubuntu系统,system—>administration—>update manager—>setting,在软件源界面,点击other softwa ...
- PYTHON中 赋值运算的若干问题总结
1.PYTHON中没有自增自减操作(++,——): 因为PYTHON中对于字符.数值等不可变的对象来说,自增自减没有意义. 2.PYTHON中l连接操作总是创建一个新对象. 举例: L=[1,2] M ...
- InnoDB: auto-extending data file ./ibdata1 is of a different size 640 pages (rounded down to MB) than specified in the .cnf file: initial 768 pages, max 0 (relevant if non-zero) pages!
问题描述: centos 安装MySQL $yum install mysql-server 安装之后执行命令mysql 报错: 查看mysql的启动日志: [ERROR] InnoDB: auto- ...
- hdu1569 方格取数(2) 最大点权独立集=总权和-最小点权覆盖集 (最小点权覆盖集=最小割=最大流)
/** 转自:http://blog.csdn.net/u011498819/article/details/20772147 题目:hdu1569 方格取数(2) 链接:https://vjudge ...
- ExtJS TreeGrid的使用方法
假设您是第一次使用ExtJS的TreeGrid的话,我相信总会有一些小麻烦的,以下就来说一说ExtJS中TreeGrid的使用. 本人使用的ExtJS版本号为4.1.1,而且使用了MVC模式.假设不了 ...
- 使用JSP实现用户登录
本文讲述使用JSP实现用户登录,包括用户登录.注册和退出功能等. 1.系统用例图 2.页面流程图 3.数据库设计 本例使用oracle数据库 创建用户表 包括id,username,password和 ...
- 在java中,List是个接口,那实现List接口的类有哪些,有什么区别?
在java中,List是个接口,那实现List接口的类有哪些,有什么区别? 解答: ArrayList是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引 ...