Spring详解之(自动装配,使用注解开发)

自动装配

1.ByName自动装配
<!--  byName: 会自动在容器上下文中查找,和自己对象set方法后面的值对应的 beanid!    -->
<bean id="people" class="pojo.People" autowire="byName">
    <property name="name" value="奥里给"/>
</bean>
2.ByType自动装配
<!--    byType:会自动在容器上下文中查找,和自己对象属性类型相同的bean!    -->
<bean id="people" class="pojo.People" autowire="byType">
    <property name="name" value="奥里给"/>
</bean>

byname的时候,需要保证所有bean的id唯一,并且这个bean需要和自动注入的属性的set方法的值一致!
bytype的时候,需要保证所有bean的class唯一,并且这个bean需要和自动注入的属性的类型一致!

使用注解进行自动装配(常用的注解)

1.使用注解前应先导入依赖
   <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.2.6.RELEASE</version>
    </dependency>

注意:加入spring-context依赖,此依赖中包含Aop依赖,而spring注解实现需要spring-AOP。

2.声明组件扫描器
<?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">

    <!--声明组件扫描器
      加入此标签之后,位置文件会加入spring-context.xsd约束
    -->
    <context:component-scan base-package="org.example.entity"></context:component-scan>
</beans>

注意:当声明组件扫描器,IDEA会更改配置文件,加入spring-context.xsd约束和context命名空间

3.常用注解展示
(1)@Component(value = “myStudent”)

@Component 等同bean id=“myStudent” class=“此类的全限定名称”

@Component :创建对象的,等同于<bean>的功能
value:就是对象的名称,创建的对象在spring容器中只有一个
位置:在类的上面

注意:

  • value可省,也可为空
  • @Component后面如果不指定名称,由spring提供默认的名称:类名首字母小写
(2)@Repository @Service @Controller

此三个注解和@Component 的功能基本一致,但又不同

  • @Repository( 用在持久层) 可以访问数据库
  • @Service(用在业务层上面) 业务处理,和事务
  • @Controller(用在控制器对象) 处理请求对象
    注意:一般选用以上三种进行对象的创建,如果需要创建的对象与上面的三层架构没有关系,再采用@Component
(3)@Value(value=" ")
 进行简单类型的赋值
 位置:属性之上或者set方法之上
     @Value(value = "zhangfei")
    private  String  name;
    private  Integer age;
    @Value(value="20")
    public void setAge(Integer age) {
        System.out.println("set方法实现了");
        this.age = age;
    }

注意:在spring中string类型也属于简单类型

(4)@Autowired

直接在属性上使用即可!也可以在set方式上使用!
使用Autowired 我们可以不用编写Set方法了,前提是你这个自动装配的属性在 IOC(Spring)容器中存在,且符合类型byType!

public class People {
    //如果显示定义了Autowired的required属性为false,说明这个对象可以为null,赋值失败了,引用类型赋值为null
    //required=true :表示引用类型赋值失败,程序报错,并终止执行
    @Autowired(required = false)
    private Cat cat;
    @Autowired
    private Dog dog;
    private String name;
}
(5)@Qualifier(value=" ")

如果@Autowired自动装配的环境比较复杂,自动装配无法通过一个注解【@Autowired】完成的时候、我们可以使用@Qualifier(value=“xxx”)去配置@Autowired的使用,指定一个唯一的bean对象注入!

public class People {
    @Autowired
    @Qualifier(value="cat111")
    private Cat cat;
}
(6)@Resource
 JDK提供的注解,提供自动注入,默认是byName,如果通过byName赋值失败,则会采用byType。
 Spring提供了对这个注解的功能支持
    @Resource
    Student student;
    @Value("清华大学")
    String name;
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贫僧洗发爱飘柔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值