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配置的更多相关文章

  1. 10 Spring框架--基于注解的IOC配置

    1.工程环境搭建 2.基于注解的IOC配置 IOC注解的分类 (1)用于创建对象的 他们的作用就和在XML配置文件中编写一个<bean>标签实现的功能是一样的@Component: 作用: ...

  2. spring的基于注解的IOC配置

    1.配置文件配置 <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http: ...

  3. Spring 基于注解的 IOC 配置

    创建 spring 的 的 xml 配置 文件 <context:component-scan base-package="com.itheim"/> 指定创建容器时要 ...

  4. 8 -- 深入使用Spring -- 4...5 AOP代理:基于注解的“零配置”方式

    8.4.5 基于注解的“零配置”方式 AspectJ允许使用注解定义切面.切入点和增强处理,而Spring框架则可识别并根据这些注解来生成AOP代理.Spring只是使用了和AspectJ 5 一样的 ...

  5. 基于注解的形式配置Bean

    基于注解的方式配置Bean:也就说我们在每个Bean的类名前面注解一下,Spring会自动帮我们扫描Bean放进IOC容器中 I基于注解的方式配置Bean(没有依赖关系的Bean)有两个步骤: 1组件 ...

  6. Spring 框架的概述以及Spring中基于XML的IOC配置

    Spring 框架的概述以及Spring中基于XML的IOC配置 一.简介 Spring的两大核心:IOC(DI)与AOP,IOC是反转控制,DI依赖注入 特点:轻量级.依赖注入.面向切面编程.容器. ...

  7. spring基于注解的IoC以及IoC的案例

    1.Spring中IoC的常用注解 1.1明确: (1)基于注解的配置和xml的配置要实现的功能都是一样的,都是要降低程序之间的耦合,只是配置的形式不一样 2.案例:使用xml方式和注解方式实现单表的 ...

  8. 基于注解的bean配置

    基于注解的bean配置,主要是进行applicationContext.xml配置.DAO层类注解.Service层类注解. 1.在applicationContext.xml文件中配置信息如下 &l ...

  9. Struts2基于注解的Action配置

    使用注解来配置Action的最大好处就是可以实现零配置,但是事务都是有利有弊的,使用方便,维护起来就没那么方便了. 要使用注解方式,我们必须添加一个额外包:struts2-convention-plu ...

随机推荐

  1. 十六:jinja2中的if和for

    jinja2中的逻辑语句和python中的基本一致,执行逻辑的时候用{% 逻辑关键字 %}开始,{% end逻辑关键字 %}结束 if语句(判断关键字也是一样的,and.or.not···): for ...

  2. Web02_HTML&CSS

    HTML 表单标签属性介绍 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...

  3. 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 ...

  4. 关于glog使用中遇到的问题

    项目中需要打log,当初看到glog,觉得google出品应该差不了,而且简单易用,库不是很大,就选择他了. 但是在使用中还真的发现一些不顺手和库设计上的问题,反正和我的使用习惯有点不一样. 设置lo ...

  5. mysql默认的存储引擎是什么?它们的区别有哪些?mysql中索引有哪些?

    1.mysql默认引擎 mysql-5.1版本之前默认引擎是MyISAM,之后是innoDB 2.关系 MyISAM是非集聚引擎,支持全文索引;不支持事务;它是表级锁;会保存表的具体行数. innoD ...

  6. Linux字符界面字符颜色显示

    一.字符颜色 #!/bin/bash #字符颜色显示 #-e:允许echo使用转义 #\033[:开始位 #\033[0m:结束位 #\033等同于\e echo -e "\033[30m黑 ...

  7. yum本地源和网络源的配置

    一.yum本地源 1. 删除YUM库[root@tianyun ~]# rm    -rf    /etc/yum.repos.d/* 2.挂载安装光盘(临时):[root@tianyun ~]# m ...

  8. 【神经网络与深度学习】深度学习实战——caffe windows 下训练自己的网络模型

    1.相关准备 1.1 手写数字数据集 这篇博客上有.jpg格式的图片下载,附带标签信息,有需要的自行下载,博客附带百度云盘下载地址(手写数字.jpg 格式):http://blog.csdn.net/ ...

  9. HDU 1069 Monkey and Banana (动态规划、上升子序列最大和)

    Monkey and Banana Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  10. 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. ...