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. 工具栏对象GUI Status 与GUI Title

    GUI Status 与GUI Title用于自定义工具栏按钮及Report程序标题栏显示内容, 可以通过se41\SE80或直接SE38中展开对象列表进行相关操作. 如下是在SE38里,点击[显示物 ...

  2. 龙芯软硬件培训个人总结-day1

    第一天主要针对的硬件设计,推他们年底要量产的3A4000+7A1000.这里我只记录下自己关注的几个点. 1,3A4000/3B4000处理器 支持256位向量指令:    对处理器封装进行了优化,不 ...

  3. 【ABAP系列】SAP ABAP7.40新语法简介第一篇

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP7.40新语法简 ...

  4. 人工智能AI------有限状态机、分层状态机、行为树

    https://www.cnblogs.com/zhanlang96/p/4793511.html 人工智能遵循着:感知->思考->行动决策方法:有限状态机(Finite-State Ma ...

  5. 服务器上安装并使用tensorboard

    需求: 在ubunu16.0的服务器上使用Pytorch内嵌的tensorboard 安装 pip install tensorflow pip install tensorboardX 如果嫌慢可以 ...

  6. 【Python开发】【神经网络与深度学习】网络爬虫之python实现

    一.网络爬虫的定义 网络爬虫,即Web Spider,是一个很形象的名字. 把互联网比喻成一个蜘蛛网,那么Spider就是在网上爬来爬去的蜘蛛. 网络蜘蛛是通过网页的链接地址来寻找网页的. 从网站某一 ...

  7. linux free 命令 查看内存使用情况

    查看Linux服务器下的内存使用情况,可以使用命令free -m [root@localhost ~]$ free // 以KB为单位显示内存使用情况 [root@localhost ~]$ free ...

  8. 如何实现Java线程的 阻塞/唤醒(和暂停/继续 类似)

    以下为线程 阻塞/唤醒  主要代码 public class MyThread extends Thread { //无意义 private final Object lock = new Objec ...

  9. 从入门到自闭之Python 基础习题训练

    """ name = input(">>>")通过代码来验证name变量是什么数据类型? """ na ...

  10. python-day12(正式学习)

    目录 可变长参数 可变长形参之* 可变长实参之* 可变长形参之** 可变长实参之** 可变长参数应用 命名关键字形参 函数对象 四大功能 引用 当作参数传给一个函数 可以当作函数的返回值 可以当作容器 ...