Spring-IoC-属性注入的注解实现

发布于:2024-03-29 ⋅ 阅读:(21) ⋅ 点赞:(0)

1、创建对象的注解

@Component

用于声明Bean对象的注解,在类上添加该注解后,表示将该类创建对象的权限交给Spring容器。可以直接将这些类直接创建,使用的时候可以直接用。

注解的value属性用于指定bean的id值,value可以省略,省略则默认id为类名首字母小写。

其它的,跟此注解用法是一样的,只不过用的地方不同

@Repository : 用于Dao实现类的注解

@Serivce : 用于Service实现类的注解

@Controller : 用与Controller实现类的注解

2、包扫描

需要再Spring配置组件扫描器,用于爱指定的基本包中扫描注解。

如果没有包扫描,添加的创建对象的注解则不生效。

红框内的是需要添加的内容。

可以使用context:component-scan指定不同的包路径

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       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容器启动的时候需要加载配置文件,注解方式实现ioc的时候,明确通知spring那些包要扫描
    :指定的包以及子包中所有添加了component注解的类都会由spring容器来管理-->
    <!--扫描多个包的方式1-->
    <context:component-scan base-package="com.AE.dao"/>
    <context:component-scan base-package="com.AE.service"/>
    <context:component-scan base-package="com.AE.controller"/>

    <!--扫描多个包的方式2: 多个包都妨碍一个base-package中,多个包可以用逗号分号空格分隔,但是不推荐空格-->
    <context:component-scan base-package="com.AE.dao,com.AE.service,com.AE.controller"/>

    <!--扫描多个包的方式3: 直接添加父包-->
    <context:component-scan base-package="com.AE"/>

</beans>

3、属性注入 @Value

在属性上使用注解@Value,该注解的value属性用于指定要注入的值。使用该注解完成属性注入是,类中无需setter。当然,若属性有setter,则也可将其加到setter上。

4、自动注入

4.1、byType自动注入@Autowired

需要在引用属性上使用注解@Autowired,该注解默认使用按类型自动装配Bean的方式。使用该注解完成属性注入时,类中无需setter。当然,若属性有setter,则也可以加到setter上。

如下图,这种类的引用,可以通过该注解自动注入。通过类型查找注入。

4.2、byName自动注入@Autowired和@Qualifier

需要在引用属性上联合使用注解@Autowired 与@Qualifier。@Qualifier 的 value 属性用于指定要匹配的 Bean 的 id 值。类中无需 set 方法,也可加到 set 方法上。

@Autowired 还有一个属性 required,默认值为 true,表示当匹配失败后,会终止程序运行。若将其值设置为 false,则匹配失败,将被忽略,未匹配的属性值为 null。

如下

4.3、自动注入@Resource

这个跟之前的注解区别就是,这个注解是jdk1.6以上实现支持的。

1、byType注入引用类型属性

如果不带任何参数,则默认按名称的方式注入,按名称不能注入,则会按照类型进行bean的匹配注入。

2、byName注入引用类型属性

@Resource 注解指定其 name 属性,则 name 的值即为按照名称进行匹配的 Bean 的 id。

本文含有隐藏内容,请 开通VIP 后查看