009_IOC注解开发
一. @Component注解
1. @Component注解, 组件的意思, 修饰一个类, 有一个value属性, 可以给组件指定一个名字。相当于我们在Spring的XML配置文件里, 配置了一个bean, 给bean指定了一个名字, 并指定类。
2. @Component注解有三个衍生注解, 功能类似, 推荐使用:
2.1. @Controller: 修饰Web层类。
2.2. @Service: 修饰service层类。
2.3. @Repository: 修饰dao层类。
二. 属性注解
1. 普通属性注解: @Value设置普通属性的值。
2. 对象属性
2.1. @Autowired: 设置对象类型属性的值。但是是按照类型完成属性注入的。
2.2. @Qualifier: 按照名称完成属性注入。
2.3. 通常@Autowired和@Qualifier注解配合使用, 完成对象类型属性的按名称注入。
2.4. @Resource: 完成对象类型属性的按名称注入。一个注解完成了@Autowired和@Qualifier两个注解所做的事情, 推荐使用。
三. IOC注解例子
1. 新建一个名为IOCAnnotation的Java工程, 拷入相关jar包
2. 新建一个名为UserDao.java的接口
package com.lywgames.dao;public interface UserDao {public void save();
}
3. 新建一个名为UserDaoImpl.java的类实现UserDao.java接口
package com.lywgames.dao.impl;import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import com.lywgames.dao.UserDao;@Component(value="userDao")
// 相当于我们在Spring的XML配置了一个bean,<bean name="userDao" class="com.lywgames.dao.impl.UserDaoImpl"/>
public class UserDaoImpl implements UserDao {@Value("张三") // 注册普通属性private String name;@Overridepublic void save() {System.out.println("保存" + name + "成功。");}}
4. 新建一个名为UserService.java的接口
package com.lywgames.service;public interface UserService {public void save();
}
5. 新建一个名为UserServiceImpl.java的类实现UserService.java接口
package com.lywgames.service.impl;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
import com.lywgames.dao.UserDao;
import com.lywgames.service.UserService;@Component(value="userService") // 相当于我们在XML配置了一个bean,<bean name="userService" class="com.lywgames.service.impl.UserServiceImpl"/>
public class UserServiceImpl implements UserService {@Autowired // 注册对象类型@Qualifier(value="userDao") // 按照名称完成属性注入private UserDao userDao;@Overridepublic void save() {userDao.save();}}
6. 新建一个名为UserAction.java的类
package com.lywgames.web.action;import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.lywgames.service.UserService;public class UserAction {public static void main(String[] args) {ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");UserService userService = applicationContext.getBean(UserService.class);userService.save();applicationContext.close();}}
7. 在src目录下创建applicationContext.xml
8. 运行项目
四. Bean生命周期和作用域注解
1. 生命周期相关的注解
1.1. 初始化方法的注解@PostConstruct
1.2. 销毁方法的注解@PreDestroy
2. bean作用范围的注解@Scope
2.1. @Scope的值
2.1.1. singleton: 默认单例。
2.1.2. prototype: 多例。
2.1.3. request: 应用在web项目中, Spring创建这个类的对象以后, 将这个对象存入到request范围中。
2.1.4. session: 应用在web项目中, Spring创建这个类的对象以后, 将这个对象存入到session范围中。
2.2. 添加@Scope注解
五. Bean生命周期和作用域注解
1. 新建一个名为IOCAnnotationLifeCycle的Java工程, 拷入相关jar包
2. 新建一个名为UserDao.java的接口
package com.lywgames.dao;public interface UserDao {public void save();
}
3. 新建一个名为UserDaoImpl.java的类实现UserDao.java接口
package com.lywgames.dao.impl;import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Repository;
import com.lywgames.dao.UserDao;@Repository(value="userDao") // 相当于我们在XML配置了一个bean,<bean name="userDao" class="com.lywgames.dao.impl.UserDaoImpl"/>
@Scope(value="prototype")
public class UserDaoImpl implements UserDao {@Value("张三") // 注册普通属性private String name;public UserDaoImpl() {System.out.println("UserDaoImpl被创建了");}@PostConstructpublic void init() {System.out.println("UserDaoImpl被初始化了");}@Overridepublic void save() {System.out.println("保存" + name + "成功。");}@PreDestroypublic void destroy() {System.out.println("UserDaoImpl被销毁了");}}
4. 新建一个名为UserService.java的接口
package com.lywgames.service;public interface UserService {public void save();
}
5. 新建一个名为UserServiceImpl.java的类实现UserService.java接口
package com.lywgames.service.impl;import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import com.lywgames.dao.UserDao;
import com.lywgames.service.UserService;@Service(value="userService") // 相当于我们在XML配置了一个bean,<bean name="userService" class="com.lywgames.service.impl.UserServiceImpl"/>
public class UserServiceImpl implements UserService {@Resource(name="userDao") // 完成对象的按名称注入private UserDao userDao;@Overridepublic void save() {userDao.save();}}
6. 新建一个名为UserAction.java的类
package com.lywgames.web.action;import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.lywgames.service.UserService;public class UserAction {public static void main(String[] args) {ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");UserService userService = applicationContext.getBean(UserService.class);userService.save();applicationContext.close();}}
7. 在src目录下创建applicationContext.xml
8. 运行项目
六. XML方式和注解方式
1. XML方式和注解方式比较
基于XML配置 |
基于注解配置 |
|
Bean定义 |
<bean id="" class=""/> |
@Component: 修饰一个类 @Component的衍生类 @Controller: 修饰Web层类 @Service: 修饰service层类 @Repository: 修饰dao层类 |
Bean名称 |
通过id或name指定 |
@Component(value="") |
Bean注入 |
构造函数注入: <constructor-arg name="id" value="101"/> 属性注入: <property name="id" value="102"/> p命名空间: <bean p:id="" p:teacher-ref=""/> SpEL表达式: <property name=="" value="#{}"/> |
@Autowired: 按类型注入 @Qualifier(value=""): 按照名称完成属性注入 @Resource(name=""): 完成对象类型属性的按名称注入 |
声明周期 |
<bean init-method="" destroy-method=""/> |
@PostConstruct初始化 @PreDestroy销毁 |
Bean作用范围 |
<bean scope=""/> |
@Scope(value="") |
适用场景 |
适用性更广, 结构更加清晰。 |
适用类是自己定义, 开发更方便。 |
2. XML和注解的整合开发
2.1. XML定义类
2.2. 注解属性注入
七. XML和注解的整合开发例子
1. 新建一个名为IOCXMLAnnotation的Java工程, 拷入相关jar包
2. 新建一个名为UserDao.java的接口
package com.lywgames.dao;public interface UserDao {public void save();
}
3. 新建一个名为UserDaoImpl.java的类实现UserDao.java接口
package com.lywgames.dao.impl;import org.springframework.beans.factory.annotation.Value;
import com.lywgames.dao.UserDao;public class UserDaoImpl implements UserDao {@Value("张三") // 注册普通属性private String name;@Overridepublic void save() {System.out.println("保存" + name + "成功。");}}
4. 新建一个名为UserService.java的接口
package com.lywgames.service;public interface UserService {public void save();
}
5. 新建一个名为UserServiceImpl.java的类实现UserService.java接口
package com.lywgames.service.impl;import javax.annotation.Resource;
import com.lywgames.dao.UserDao;
import com.lywgames.service.UserService;public class UserServiceImpl implements UserService {@Resource(name="userDao") // 完成对象的按名称注入private UserDao userDao;@Overridepublic void save() {userDao.save();}}
6. 新建一个名为UserAction.java的类
package com.lywgames.web.action;import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.lywgames.service.UserService;public class UserAction {public static void main(String[] args) {ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");UserService userService = applicationContext.getBean(UserService.class);userService.save();applicationContext.close();}}
7. 在src目录下创建applicationContext.xml
8. 运行项目
009_IOC注解开发相关推荐
- mybatis使用注解开发
mybatis使用注解开发 面向接口编程 在之前我们是通过面向对象编程,但是在真正开发的时候我们会选择面向接口编程. 根本原因 : 解耦 , 可拓展 , 提高复用 , 分层开发中 , 上层不用管具体的 ...
- 使用注解开发SpringMVC详细配置教程
目录 1.使用注解开发SpringMVC 1.新建一个普通的maven项目,添加web支持 2.在pom.xml中导入相关依赖 3.配置web.xml 4.编写SpringMVC配置文件 1. 自动扫 ...
- 【Spring Web MVC】Spring Web MVC 注解开发环境搭建
为什么80%的码农都做不了架构师?>>> 1.创建maven项目 创建一个名为:springwebmvc-first的maven项目 2.添加依赖包 要使用springWebM ...
- AspectJ的注解开发AOP:异常抛出通知的学习
AspectJ的注解开发AOP:异常抛出通知的学习 参考文章: (1)AspectJ的注解开发AOP:异常抛出通知的学习 (2)https://www.cnblogs.com/xiaolaha/p/1 ...
- 【SSM框架系列】Spring IoC(控制反转) DI(依赖注入)注解开发
Spring注解开发 Spring是轻代码重配置的框架,配置比较繁重,会影响开发效率.这个时候可以通过注解开发,注解代替xml配置文件可以简化配置,提高开发效率. Spring原始注解 注解分为原始注 ...
- 07-XML 文件注解开发
目录 注解 一.@Configuration @Import 二.@ComponentScan 三.@bean 1.Config完整代码 2.测试类 不论是 xml 开发或者注解开发都有一个问题是,我 ...
- 011_AOP注解开发
一. Spring的基于ApsectJ的注解的AOP开发 1. 编写目标类并配置 2. 编写切面类并配置 3. 在配置文件中打开注解的AOP开发 4. 在切面类上使用注解@Aspect 5. 前置通知 ...
- SpringMVC学习03之使用注解开发SpringMVC
复习 Spring MVC的特点: 轻量级,简单易学 高效 , 基于请求响应的MVC框架 与Spring兼容性好,无缝结合 约定优于配置 功能强大:RESTful.数据验证.格式化.本地化.主题等 简 ...
- springmvc学习笔记(10)-springmvc注解开发之商品改动功能
springmvc学习笔记(10)-springmvc注解开发之商品改动功能 springmvc学习笔记(10)-springmvc注解开发之商品改动功能 标签: springmvc springmv ...
最新文章
- DPU(Data Processing Unit)数据处理器
- activiti 工作流_activiti工作流引擎入门
- 审车按月还是日期_新手都该知道的审车流程!
- 文巾解题 197. 上升的温度
- python 如何理解 numpy 数组操作中的 axis 参数?
- 朴素贝叶斯(naive bayes)
- 面试官 | 讲一下如何给高并发系统做限流?
- vue ---- 组件
- HTML文件中引入其他HTML代码片段
- 使用scrapy爬取dota2贴吧数据并进行分析 1
- Flutter shared_preferences简单使用
- Swift,任重而道远!
- 计算机哪里找产品密钥,计算机windows的密钥在哪里可以找到?
- ORA-03113 错误分析与解决
- cesium中级(一)使用渐变纹理
- 血战力扣 332.零钱兑换
- 地图数据赋能ADAS的探索与实践(转载)
- 彻底删除paragon ntfs for mac
- Linux高级运维 第八章 部署docker容器虚拟化平台
- 奥斯卡金像奖导演洛朗•维茨 (Laurent Witz)出席第十一届中国国际动漫节
热门文章
- 【Linux】JDK+Eclipse 搭建C/C++开发环境
- java json格式的转换和读取
- 手把手玩转协同编辑(1):AST (Address Space Transformation)地址空间转换算法 基本介绍...
- Yii2中如何将Jquery放在head中的方法
- 11月国内网站统计:淘宝得益于双11流量直逼腾讯
- 关于虚拟机vmware共享虚拟网卡上网
- 转载 为什么要有ibgp
- 通过Internet与数据链路层传输信息时会发生什么?—Vecloud微云
- Docker 阿里云镜像加速
- 数据结构——数据结构中的数据表示