侧边栏壁纸
博主头像
coydone博主等级

记录学习,分享生活的个人站点

  • 累计撰写 306 篇文章
  • 累计创建 51 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

基于注解的IoC

coydone
2022-03-14 / 0 评论 / 0 点赞 / 357 阅读 / 2,785 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-04-10,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

基于注解的IoC配置

开启Spring注解支持

Spring的注解支持需要spring-aop-5.0.2.RELEASE.jarJar包。

需要在Spring的配置文件中设置让Spring支持注解。

如bean.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在创建容器时要扫描的包,配置所需要的标签不是在bean的约束中,
    而是一个名称为context名称空间和约束中-->
    <context:component-scan base-package="com.coydone"></context:component-scan>
</beans>

曾经的xml配置:

<bean id="userService" class="com.coydone.service.impl.UserServiceImpl" scope=""  init-method=""  destroy-method="">
    <property name="" value="" / ref=""></property>
</bean>

常用注解

用于创建对象

它们的作用就和在XML配置文件中编写一个<bean>标签实现的功能是一样的。

@Component

作用:把资源让Spring来管理。相当于在xml中配置一个 bean。用于把当前类对象存入Spring容器中。

属性:value:指定 bean 的 id。如果不指定 value 属性,默认 bean 的 id 是当前类的类名,且首字母改小写。

@Controller、@Service、@Repository

它们三个注解都是针对一个的衍生注解,他们的作用及属性都是一模一样的。他们只不过是提供了更加明确的语义化。

@Controller:一般用于表现层的注解。

@Service:一般用于业务层的注解。

@Repository:一般用于持久层的注解。

细节:如果注解中有且只有一个属性要赋值时,且名称是value,value在赋值是可以不写。

用于注入数据

它们的作用就和在XML配置文件中的bean标签中写一个<property>标签的作用是一样的。

@Autowired

属性注解、方法注解(set),声明当前属性自动装配,默认byType。

@Autowired(required = false) 通过requried属性设置当前自动装配是否为必须(默认必须,如果没有找到类型与属性类型匹配的bean则抛出异常)

自动按照类型注入(自动装配)。当使用注解注入属性时,set方法可以省略。它只能注入其它bean 类型。当有多个类型匹配时,使用要注入的对象变量名称作为 bean 的 id,在Spring容器查找,找到了也可以注入成功。找不到就报错。

@Qualifier

作用:在自动按照类型注入的基础之上,再按照Bean的id注入。它在给字段注入时不能独立使用,必须和@Autowired 一起使用;但是给方法参数注入时,可以独立使用。(byType、ref引用)

属性:value:指定 bean 的 id。

@Autowired
public void setClazz(@Qualifier("c2" ) Clazz clazz) {
	this.clazz = clazz;
}

@Resource

直接按照Bean的id注入。它也只能注入其他bean类型。

属性注解,也用于声明属性自动装配。默认装配方式为byName,如果根据byName没有找到对应的bean,则继续根据byType寻找对应的bean,根据byType如果依然没有找到Bean或者找到不止一个类型匹配的bean,则抛出异常。

属性:name:指定bean的id。

以上三个注入都只能注入其它bean类型的数据,而基本类型和String类型无法使用上述注解实现。集合类型的注入只能通过XML来实现。

@Value

作用:注入基本数据类型和String类型数据的。

属性:value:用于指定值。它可以使用Spring中的SpEL(也就是Spring的EL表达式)。写法:${表达式}

用于改变作用范围

它们的作用就和在bean标签中使用scope属性实现的功能是一样的。

@Scope

作用:指定 bean 的作用范围。

属性:value:指定范围的值;取值:singleton、prototype、request、session、globalsession。

@Lazy

类注解,用于声明一个单例模式的Bean是否为懒汉模式。@Lazy(true) 表示声明为懒汉模式,默认为饿汉模式。

生命周期相关(了解)

它们的作用就和在bean标签中使用init-methoddestroy-method的作用是一样的。

@PostConstruct

方法注解,声明一个方法为当前类的初始化方法(在构造器之后执行),相当于bean标签的init-method属性。

@PreDestroy

方法注解,声明一个方法为当前类的销毁方法(在对象从容器中释放之前执行),相当于bean标签的destory-method属性。

关于Spring注解和XML的选择问题

注解的优势:配置简单,维护方便(我们找到类,就相当于找到了对应的配置)。

XML 的优势:修改时,不用改源码。不涉及重新编译和部署。

Spring管理Bean方式的比较:

0

评论区