使用注解方式配置Spring Bean

注:示例项目创建于IDEA编译器,使用Java语言,maven框架

1、引入Spring-aop依赖

Spring的注解是通过aop的方式实现的所以我们需要在pom.xml文件中加入Spring-aop的依赖,加入方式大致如下:

在您的pom.xml文件中加入下面的代码

<dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aop</artifactId>
<!--      这些依赖的版本需要相同-->
      <version>5.2.4.RELEASE</version>
    </dependency>
  </dependencies>

2、开启注解的包扫描

需要用到一个Context的命名空间,IDEA创建的maven项目是默认没有的。我们需要到spring官网上找到,百度搜索spring,进入spring的官网。在网页上方的功能栏里找到project => Sping Framework

spring修改beandefinition 添加类注解 spring中如何使用注解来配置bean_xml


点击Core technologies

spring修改beandefinition 添加类注解 spring中如何使用注解来配置bean_spring_02


需要自带查询功能的浏览器,在查询栏中输入xmlns:context关键字

spring修改beandefinition 添加类注解 spring中如何使用注解来配置bean_xml文件_03


找到以下三段代码加入到xml文件中

spring修改beandefinition 添加类注解 spring中如何使用注解来配置bean_xml文件_04

<?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
       https://www.springframework.org/schema/context/spring-context.xsd">

</beans>

(注意:最后两段不是直接插入,是在最后面的 "> 符号之前插入,看看插入后最后面是否有 ">

spring修改beandefinition 添加类注解 spring中如何使用注解来配置bean_xml_05


为什么需要添加这几个文件?

  • xml是可扩展的标记语言,如果不加约束,你即使写错标签名、并且符合xml规则,那么xml是不会提示错误的,那么有可能解析不到内容.xml主要有两种约束技术:DTD和Schema.
  • 我们的示例使用的是Schema方式。上面添加的文件就是用来规定我们怎么写xml。就比如我们一开始通过原有的文件,可以在xml文件中写bean,实际上怎样写bean就是文件所规定好的,使用规定的方式写该文件,我们才不容易出现错误,因为xml是不会提示错误的。

在xml文件中写入配置的方式

在刚刚添加的代码的后面加入以下代码,写法如下:

<context:component-scan base-package="包名"/>

<!--例子-->
<context:component-scan base-package="org.csu.spring.demo.ioc"/>

包名就是你需要使用注解的包,spring框架会扫描该包下的所有注解。


3、使用注解

在需要创建的对象的类中添加@Component注解

假如我需要容器帮我创建Account对象,我只需要在定义这个对象的类上写上@Component(“account”)

spring修改beandefinition 添加类注解 spring中如何使用注解来配置bean_spring_06


获取这个对象

ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
 Account account = (Account) context.getBean("account");

获取对象的方式是跟xml方式一样的,都是先初始化Spring的环境,工厂创建好对象放进容器,最后用户使用Spring的容器获取对象。

给对象附上初始值的方式

spring修改beandefinition 添加类注解 spring中如何使用注解来配置bean_xml_07


在需要赋值的属性上使用@Value注解,就可以给上初始值


给对象的内部类赋初值

1、假设我需要一个有初始值的accountService对象,有两种使用注解的方式,第一个是使用**@Autowired**

spring修改beandefinition 添加类注解 spring中如何使用注解来配置bean_xml_08


Autowired是自动注入的方式,可以自己识别类中属性的类型。但是缺点就是,它是按类型注入,可能会存在一些问题。比如我们需要给accountDAO对象注入初始值,在注入的时候,框架会找到需要扫描的包下,类型为AccountDAO的类,注入该对象。如果这个类型的类,有多个的话,这样的方法就不行。可能还存在一个问题,如果想要注入的对象没有写它的类的话,就是可能会把null值给放进对象中,比如我想accountDAO对象注入值,但是代码中没有AccountDAO类。

2、@Resource

在pom.xml文件中导入Resource注解依赖

spring修改beandefinition 添加类注解 spring中如何使用注解来配置bean_spring_09


注入的初始参数的写法如下:

spring修改beandefinition 添加类注解 spring中如何使用注解来配置bean_xml文件_10


Resource标签是按照名称注入,框架会在外面找到bean中跟你写的name的相同名字,再把它注入进去

spring修改beandefinition 添加类注解 spring中如何使用注解来配置bean_spring_11


Spring-IoC的常用的注解

  • @Component
    下面三个注解都可以说是Componect的子类,使用Component注解的就是一个普通Java类。

(下面三个注解对应的是MVC框架的三种类,虽然都是类,只是更加特殊)

  • @Controller(被它注解Spring框架会认为这个类是一个控制器)
  • @Respository(DAO层的类)
  • @Service(业务层的类)
  • @Value(给类中属性注入初始值)
  • @Resource(给类中的内部类注入初始值)

一个自动创建spring环境的小技巧

每次在我们使用Junit测试框架创建的类是否成功的时候,每次都需要加上

ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
Account account = (Account) context.getBean("account");

从而才能获取spring环境,这样比较麻烦,我们可以在pom.xml文件中加入新的依赖包(Spring和Junit联动的专门用于测试代码的包),让框架帮我们完成这个操作,自动初始化spring环境。

在pom.xml文件中加入下面的代码

spring修改beandefinition 添加类注解 spring中如何使用注解来配置bean_spring_12


在需要测试的类名上面加入这两段代码

spring修改beandefinition 添加类注解 spring中如何使用注解来配置bean_xml_13

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")

第一个注解是告诉框架你需要它帮你来创建spring环境进行测试,其中的 .class 就是xml文件的位置,需要我们把位置赋给它
第二个注解classpath就是在根目录下找到applicationContext.xml文件把位置赋值给它(注意:这个文件名是自己取的,根据实际xml文件的名字进行修改)


以后要使用类的话,就不需要先初始化Spring和获取bean容器,再获得类了。直接把需要使用的类创建出来再通过@Autowired把它自动注入进去就可以使用,例如下图:

spring修改beandefinition 添加类注解 spring中如何使用注解来配置bean_xml文件_14


注意:使用这种方式必须要Junit是4.12或者更高的版本

spring修改beandefinition 添加类注解 spring中如何使用注解来配置bean_xml_15


如果出现上述情况,在pom.xml文件中把Junit的版本改成4.12或更高版本即可。

spring修改beandefinition 添加类注解 spring中如何使用注解来配置bean_xml_16