基于注解的IOC配置
1 明确
- 注解配置和XML配置要实现的功能都是一样的,都是要降低程序间的耦合。只是配置的形式不一样。
 - 关于实际的开发中到底是使用XML还是注解,每家公司有着不同的习惯。具体问题具体分析。
 
2 环境搭建
2.1 导入所需要的jar包的maven坐标
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.0.RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.17</version>
</dependency>
<dependency>
<groupId>commons-dbutils</groupId>
<artifactId>commons-dbutils</artifactId>
<version>1.7</version>
</dependency>
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.4</version>
</dependency>
2.2 使用@Component注解配置管理的资源
- IAccountService.java
 
package com.sunxiaping.spring5.service;
import com.sunxiaping.spring5.domain.Account;
public interface IAccountService {
    void save(Account account);
}
- AcccountServiceImpl.java
 
package com.sunxiaping.spring5.service.impl; import com.sunxiaping.spring5.dao.IAccountDao;
import com.sunxiaping.spring5.domain.Account;
import com.sunxiaping.spring5.service.IAccountService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; @Component("accountService")
public class AccountServiceImpl implements IAccountService { @Autowired
private IAccountDao accountDao; @Override
public void save(Account account) {
accountDao.save(account);
}
}
- IAccountDao.java
 
package com.sunxiaping.spring5.dao; import com.sunxiaping.spring5.domain.Account; /**
* 账户的持久层接口
*/
public interface IAccountDao { void save(Account account);
}
- AccountDaoImpl.java
 
package com.sunxiaping.spring5.dao.impl; import com.sunxiaping.spring5.dao.IAccountDao;
import com.sunxiaping.spring5.domain.Account;
import org.springframework.stereotype.Component; @Component("accountDao")
public class AccountDaoImpl implements IAccountDao { @Override
public void save(Account account) {
System.out.println("保存账户信息");
}
}
- 注意:当我使用注解的时候,set方法可以不用写。
 
2.3 创建spring的xml配置文件并开启对注解的支持
- applicationContext.xml
 
<?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"> <!--告知Spring创建容器的时候要扫描的包-->
<context:component-scan base-package="com.sunxiaping.spring5"></context:component-scan> </beans>
2.4 测试
- 示例:
 
package com.sunxiaping; import com.sunxiaping.spring5.service.IAccountService;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class spring5Test {
ApplicationContext context = null; @Before
public void before() {
context = new ClassPathXmlApplicationContext("applicationContext.xml");
} @Test
public void test() {
IAccountService accountService = context.getBean("accountService", IAccountService.class);
accountService.save(null);
} }
3 常用注解
3.1 用于创建对象的
- 相当于<bean id="" class="">
 
3.1.1 @Component
- 作用:把资源让Spring来管理。相当于在XML中配置一个Bean。
 
3.1.2 @Controller、@Service、@Repository
- 这三个注解都是针对@Component注解的衍生注解,他们的作用及属性都是一模一样的。
 - 这三个注解只不过提供了更加明确的语义化。
 - @Controller注解:一般用于表现层的注解。
 - @Service注解:一般用于业务层的注解。
 - @Repository注解:一般用于持久层的注解。
 
- 细节:如果注解中有且只有一个属性要赋值,并且名称是value,value在赋值的时候可以不写。
 
3.2 用于注入数据
- 相当于<property name="" ref=""/>和<property name="" value=""/>。
 
3.2.1 @Autowired
- 作用:自动按照类型注入。当使用注解注入属性的时候,set方法可以省略。它只能注入其他Bean类型。当有多个类型匹配的时候,使用要注入的对象变量名称作为Bean的id,在Spring容器中查找,找到了就注入,找不到就报错。
 
3.2.2 @Qualifier
- 作用:在自动按照类型注入的基础之上,再按照Bean的id注入。它在给字段注入的时候不能独立使用,必须和@Autowired一起使用,但是给方法参数注入的时候,可以独立使用。
 - 属性:value,指定是Bean的id。
 
3.2.3 @Resource
- 作用:直接按照Bean的id注入。它也只能注入其他Bean类型。
 - 属性:name,指的是Bean的id。
 
3.2.4 @Value
- 作用:注入基本数据类型和String类型。
 - 属性:value,用于指定值。
 
3.3 用于改变作用范围
- 相当于:<bean id="" class="" scope="">。
 
3.3.1 @Scope注解
- 作用:指定Bean的作用范围。
 - 属性:
- value,指定范围的值。
 - 取值:singleton和prototype request session globalsession。
 
 
3.4 和生命周期相关的
- 相当于<bean id="" class="" init-method="" destroy-method="">。
 
3.4.1 @PostConstruct
- 作用:用于指定初始化方法。
 
3.4.2 @PreDestroy
- 作用:用于指定销毁方法。
 
4 关于Spring注解和XML的选择问题
4.1 注解的优势
- 配置简单,维护方便。
 
4.2 XML的优势
- 修改时,不需要改源代码。不涉及重新编译和部署。
 
基于注解的IOC配置的更多相关文章
- 10 Spring框架--基于注解的IOC配置
		
1.工程环境搭建 2.基于注解的IOC配置 IOC注解的分类 (1)用于创建对象的 他们的作用就和在XML配置文件中编写一个<bean>标签实现的功能是一样的@Component: 作用: ...
 - spring的基于注解的IOC配置
		
1.配置文件配置 <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http: ...
 - Spring 基于注解的 IOC 配置
		
创建 spring 的 的 xml 配置 文件 <context:component-scan base-package="com.itheim"/> 指定创建容器时要 ...
 - 8 -- 深入使用Spring -- 4...5 AOP代理:基于注解的“零配置”方式
		
8.4.5 基于注解的“零配置”方式 AspectJ允许使用注解定义切面.切入点和增强处理,而Spring框架则可识别并根据这些注解来生成AOP代理.Spring只是使用了和AspectJ 5 一样的 ...
 - 基于注解的形式配置Bean
		
基于注解的方式配置Bean:也就说我们在每个Bean的类名前面注解一下,Spring会自动帮我们扫描Bean放进IOC容器中 I基于注解的方式配置Bean(没有依赖关系的Bean)有两个步骤: 1组件 ...
 - Spring 框架的概述以及Spring中基于XML的IOC配置
		
Spring 框架的概述以及Spring中基于XML的IOC配置 一.简介 Spring的两大核心:IOC(DI)与AOP,IOC是反转控制,DI依赖注入 特点:轻量级.依赖注入.面向切面编程.容器. ...
 - spring基于注解的IoC以及IoC的案例
		
1.Spring中IoC的常用注解 1.1明确: (1)基于注解的配置和xml的配置要实现的功能都是一样的,都是要降低程序之间的耦合,只是配置的形式不一样 2.案例:使用xml方式和注解方式实现单表的 ...
 - 基于注解的bean配置
		
基于注解的bean配置,主要是进行applicationContext.xml配置.DAO层类注解.Service层类注解. 1.在applicationContext.xml文件中配置信息如下 &l ...
 - Struts2基于注解的Action配置
		
使用注解来配置Action的最大好处就是可以实现零配置,但是事务都是有利有弊的,使用方便,维护起来就没那么方便了. 要使用注解方式,我们必须添加一个额外包:struts2-convention-plu ...
 
随机推荐
- 十六:jinja2中的if和for
			
jinja2中的逻辑语句和python中的基本一致,执行逻辑的时候用{% 逻辑关键字 %}开始,{% end逻辑关键字 %}结束 if语句(判断关键字也是一样的,and.or.not···): for ...
 - Web02_HTML&CSS
			
HTML 表单标签属性介绍 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...
 - Install the Flash plug-in
			
Flash is a plug-in for your web browser that allows you to watch videos and use interactive web page ...
 - 关于glog使用中遇到的问题
			
项目中需要打log,当初看到glog,觉得google出品应该差不了,而且简单易用,库不是很大,就选择他了. 但是在使用中还真的发现一些不顺手和库设计上的问题,反正和我的使用习惯有点不一样. 设置lo ...
 - mysql默认的存储引擎是什么?它们的区别有哪些?mysql中索引有哪些?
			
1.mysql默认引擎 mysql-5.1版本之前默认引擎是MyISAM,之后是innoDB 2.关系 MyISAM是非集聚引擎,支持全文索引;不支持事务;它是表级锁;会保存表的具体行数. innoD ...
 - Linux字符界面字符颜色显示
			
一.字符颜色 #!/bin/bash #字符颜色显示 #-e:允许echo使用转义 #\033[:开始位 #\033[0m:结束位 #\033等同于\e echo -e "\033[30m黑 ...
 - yum本地源和网络源的配置
			
一.yum本地源 1. 删除YUM库[root@tianyun ~]# rm -rf /etc/yum.repos.d/* 2.挂载安装光盘(临时):[root@tianyun ~]# m ...
 - 【神经网络与深度学习】深度学习实战——caffe windows 下训练自己的网络模型
			
1.相关准备 1.1 手写数字数据集 这篇博客上有.jpg格式的图片下载,附带标签信息,有需要的自行下载,博客附带百度云盘下载地址(手写数字.jpg 格式):http://blog.csdn.net/ ...
 - HDU 1069 Monkey and Banana (动态规划、上升子序列最大和)
			
Monkey and Banana Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
 - shell下的 awk/sed/grep/seq/tr
			
转自:实例手册 https://github.com/liquanzhou/ops_doc/blob/master/shell%E5%AE%9E%E4%BE%8B%E6%89%8B%E5%86%8C. ...