Spring:基于注解的控制反转(ioc)

1、导入依赖(同xml方式)

2、配置文件

在applicationContext.xml文件中配置扫描注解所在的包,新增了context约束

<?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">

    <context:component-scan base-package="com.zapng.service"/>
</beans>

注意:在这个扫描下还有两个可选的标签exclude-filter和include-filter,即指定哪些注解要扫描,哪些注解不扫描,通常会使用排除的标签,指定annotation类型,再指定要被排除的注解的全类名

<context:component-scan base-package="com.zanpng">
    <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>

3、使用注解

创建对象的注解

用在类上,创建当前类对象并把它存入ioc容器中。

@Component,通用的

@Controller,一般用在表现层

@Service,一般用在业务逻辑层

@Repository:一般用在持久层

这些注解有一个属性value,用于指定唯一标识id。如果不写,默认就是当前类名(首字母改小写)

依赖注入的注解

用在类属性上,通常用于注入对象,并且此时set方法不是必须的。

@AutoWired,自动根据类型进行注入

如果ioc容器中有唯一的bean对象类型和要注入的变量匹配,则可以注入成功;

如果容器中有多个bean对象类型和要注入的变量匹配,则需要再次根据id匹配来注入,如果有指定的id,则可注入成功;

比如某个service层接口有两个实现类,当我们给该接口注入的时候,ioc中会有两个实现类对象可供选择

@Qualifier(value = “指定的id”),需要和@AutoWired注解结合使用。

@Resouce(name = “指定的id”),直接根据id名来注入。可以单独使用。

如果还没有,将注入失败。

以上三个注解只能用来注入其他类型的bean对象,想要注入基本类型和String类型需要使用以下注解

@Value(value = "变量值")

复杂类型的注入只能用xml方式。

(注解和xml可以同时存在,通常自己定义的类使用注解,非自定义的类就只能使用xml文件了)

改变作用范围的注解

@Scope(value = "范围取值"),用在类上,用于指定bean的作用范围(参考基于xml中)。

补充说明

在依赖注入时,如果注入的是抽象类或者接口,不需要在此抽象类和接口上添加这些注解。只需要在它的子类上添加注解就可以了。但是在其他类中使用该对象时,可以使用接口来定义变量。

注入失败的原因通常有:

  • 配置扫描错误
  • 注解错误
  • 有多个相同注入产生冲突
发布了70 篇原创文章 · 获赞 1 · 访问量 2257

猜你喜欢

转载自blog.csdn.net/caozp913/article/details/103774571