一. @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注解开发相关推荐

  1. mybatis使用注解开发

    mybatis使用注解开发 面向接口编程 在之前我们是通过面向对象编程,但是在真正开发的时候我们会选择面向接口编程. 根本原因 : 解耦 , 可拓展 , 提高复用 , 分层开发中 , 上层不用管具体的 ...

  2. 使用注解开发SpringMVC详细配置教程

    目录 1.使用注解开发SpringMVC 1.新建一个普通的maven项目,添加web支持 2.在pom.xml中导入相关依赖 3.配置web.xml 4.编写SpringMVC配置文件 1. 自动扫 ...

  3. 【Spring Web MVC】Spring Web MVC 注解开发环境搭建

    为什么80%的码农都做不了架构师?>>>    1.创建maven项目 创建一个名为:springwebmvc-first的maven项目 2.添加依赖包 要使用springWebM ...

  4. AspectJ的注解开发AOP:异常抛出通知的学习

    AspectJ的注解开发AOP:异常抛出通知的学习 参考文章: (1)AspectJ的注解开发AOP:异常抛出通知的学习 (2)https://www.cnblogs.com/xiaolaha/p/1 ...

  5. 【SSM框架系列】Spring IoC(控制反转) DI(依赖注入)注解开发

    Spring注解开发 Spring是轻代码重配置的框架,配置比较繁重,会影响开发效率.这个时候可以通过注解开发,注解代替xml配置文件可以简化配置,提高开发效率. Spring原始注解 注解分为原始注 ...

  6. 07-XML 文件注解开发

    目录 注解 一.@Configuration @Import 二.@ComponentScan 三.@bean 1.Config完整代码 2.测试类 不论是 xml 开发或者注解开发都有一个问题是,我 ...

  7. 011_AOP注解开发

    一. Spring的基于ApsectJ的注解的AOP开发 1. 编写目标类并配置 2. 编写切面类并配置 3. 在配置文件中打开注解的AOP开发 4. 在切面类上使用注解@Aspect 5. 前置通知 ...

  8. SpringMVC学习03之使用注解开发SpringMVC

    复习 Spring MVC的特点: 轻量级,简单易学 高效 , 基于请求响应的MVC框架 与Spring兼容性好,无缝结合 约定优于配置 功能强大:RESTful.数据验证.格式化.本地化.主题等 简 ...

  9. springmvc学习笔记(10)-springmvc注解开发之商品改动功能

    springmvc学习笔记(10)-springmvc注解开发之商品改动功能 springmvc学习笔记(10)-springmvc注解开发之商品改动功能 标签: springmvc springmv ...

最新文章

  1. DPU(Data Processing Unit)数据处理器
  2. activiti 工作流_activiti工作流引擎入门
  3. 审车按月还是日期_新手都该知道的审车流程!
  4. 文巾解题 197. 上升的温度
  5. python 如何理解 numpy 数组操作中的 axis 参数?
  6. 朴素贝叶斯(naive bayes)
  7. 面试官 | 讲一下如何给高并发系统做限流?
  8. vue ---- 组件
  9. HTML文件中引入其他HTML代码片段
  10. 使用scrapy爬取dota2贴吧数据并进行分析 1
  11. Flutter shared_preferences简单使用
  12. Swift,任重而道远!
  13. 计算机哪里找产品密钥,计算机windows的密钥在哪里可以找到?
  14. ORA-03113 错误分析与解决
  15. cesium中级(一)使用渐变纹理
  16. 血战力扣 332.零钱兑换
  17. 地图数据赋能ADAS的探索与实践(转载)
  18. 彻底删除paragon ntfs for mac
  19. Linux高级运维 第八章 部署docker容器虚拟化平台
  20. 奥斯卡金像奖导演洛朗•维茨 (Laurent Witz)出席第十一届中国国际动漫节

热门文章

  1. 【Linux】JDK+Eclipse 搭建C/C++开发环境
  2. java json格式的转换和读取
  3. 手把手玩转协同编辑(1):AST (Address Space Transformation)地址空间转换算法 基本介绍...
  4. Yii2中如何将Jquery放在head中的方法
  5. 11月国内网站统计:淘宝得益于双11流量直逼腾讯
  6. 关于虚拟机vmware共享虚拟网卡上网
  7. 转载 为什么要有ibgp
  8. 通过Internet与数据链路层传输信息时会发生什么?—Vecloud微云
  9. Docker 阿里云镜像加速
  10. 数据结构——数据结构中的数据表示