0


Spring:Annontation

Bean

在这里插入图片描述

配置

在 Spring 中,配置 bean 实例一般使用 xml 配置方式或注解(Annontation) 方式进行配置。

注解

注解(Annontation),是在原有代码和逻辑下通过 @XXX 的方式进行 bean 配置,简化了 xml 配置文件的同时,提高了 Java Bean 的可读性与内聚性。
注解说明@Component相当于配置文件的 bean 标签,一般使用在类上@Service与@Component作用相同,但一般使用在 service 层@Controller与@Component作用相同,但一般使用在 controller 层@Repository与@Component作用相同,但一般使用在 dao 层@Value()给属性赋值@Resource相当于配置文件的 ref 属性,给对象赋值@Scope相当于配置文件的 scope 属性@PostConstruct相当于配置文件的 init-method 属性@PreDestroy相当于配置文件的 destory-method 属性@Autowired自动装配
简单示例:
首先,在 xml 配置文件中必须配置 context:component-scan 标签:

<?xml version="1.0" encoding="UTF-8"?><beansxmlns="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"><!-- 注:必须配置该配置项 --><!-- 开启 spring 注解,base-package 属性指定扫描注解的类的所在包 --><context:component-scanbase-package="cn.edu.springdemo"/></beans>

然后创建一个数学类,通过注解给其属性赋值:

packagecn.edu.springdemo.annontationDemo;importorg.springframework.beans.factory.annotation.Value;importorg.springframework.stereotype.Component;@Component(value ="mathAnnontation")// id 默认为类名,开头字母小写publicclassMathAnnontation{@Value(value ="20230515")privateint id;@Value("数学")//当只有一个值时,value 可省略privateString math;publicintgetId(){return id;}publicStringgetMath(){return math;}//也可以将配置放置在对应的 set 方法位置(区别:配置在属性上是使用反射赋值;配置在 set 方法上是调用 set 方法赋值)publicvoidsetId(int id){this.id = id;}publicvoidsetMath(String math){this.math = math;}@OverridepublicStringtoString(){return"MathAnnontation{"+"id="+ id +", math='"+ math +'\''+'}';}}

再创建一个学科类,通过注解给其对象赋值:

packagecn.edu.springdemo.annontationDemo;importorg.springframework.stereotype.Component;importjavax.annotation.Resource;@ComponentpublicclassDisciplineAnnontation{@Resource(type =MathAnnontation.class)//或者 @Resource(name = "mathAnnontation"),默认使用 name 属性privateMathAnnontationDiscipline;publicMathAnnontationgetDiscipline(){returnDiscipline;}publicvoidsetDiscipline(MathAnnontation discipline){Discipline= discipline;}@OverridepublicStringtoString(){return"DisciplineAnnontation{"+"Discipline="+Discipline+'}';}}

测试结果:

packagecn.edu.springdemo.test;importcn.edu.springdemo.annontationDemo.DisciplineAnnontation;importorg.springframework.context.ApplicationContext;importorg.springframework.context.support.ClassPathXmlApplicationContext;publicclassAdminTest{publicstaticvoidmain(String[] args){ApplicationContext applicationContext =newClassPathXmlApplicationContext("annontationDemo.xml");DisciplineAnnontation discipline =(DisciplineAnnontation) applicationContext.getBean("disciplineAnnontation");System.out.println(discipline);}}

结果如图:
在这里插入图片描述

@Autowired 注解

@Autowired,是一种注解,通过对成员变量、方法和构造函数进行标注来完成自动装配,无需再添加 Getter/Setter 与 Bean property 属性。

在上面实例的基础下,只对学科类进行修改,如图:

在这里插入图片描述

结果一样:
在这里插入图片描述

注:

  1. 当 Spring 容器没有找到对应的 bean 对象时会抛出异常,可以使用 @Autowired(required = false) 让其显示为 null ;
  2. 使用 @Resource 也可以无需添加 Getter/Setter ;
  3. @Autowired 是根据类型进行自动装配的。如果需要按名称进行装配,则需要配合 @Qualifier 使用(即 Spring 容器中有多个相同类型的 bean 时,使用 @Qualifier 注解指明使用哪个 bean );
  4. @inject 与 @Autowired 类似,但需导入相应 jar 包,不推荐使用

context:component-scan 标签

在开启 spring 注解中,必须进行配置 context:component-scan 标签。下面再讲解其标签的部分细节:

  • base-package 属性:指定 Spring 扫描注解的类的所在包,用逗号分隔多个需要扫描的包
  • resource-pattern 属性:指定 Spring 只扫描指定的包的所需类,默认扫描配置包下的所有 class 文件
  • <context:exclude-filter type=“” expression=“” /> 子标签:表示要排除的目标类
  • <context:include-filter type=“” expression=“” /> 子标签:表示要包含的目标类,需要与 use-default-filters=“false” 配合使用
<!-- 只扫描 annontationDemo 包下的所有类 --><context:component-scanbase-package="cn.edu.springdemo"resource-pattern="annontationDemo/*.class"/><!-- 排除扫描指定注解类,@Component 注解类失效 --><context:component-scanbase-package="cn.edu.springdemo"><context:exclude-filtertype="annotation"expression="org.springframework.stereotype.Component"/></context:component-scan><!-- 扫描包含的指定注解类,只有 @Component 注解类生效 --><context:component-scanbase-package="cn.edu.springdemo"use-default-filters="false"><context:include-filtertype="annotation"expression="org.springframework.stereotype.Component"/></context:component-scan>

注:
type="annotation" expression="":根据注解类型
type=“assignable” expression="":根据某个具体的类或接口以及该接口实现类
标签: Spring Bean Annontation

本文转载自: https://blog.csdn.net/qq_56886142/article/details/130680601
版权归原作者 啊Q老师 所有, 如有侵权,请联系我们删除。

“Spring:Annontation”的评论:

还没有评论