Spring入门(4)--基于注解管理Bean

一、基于注解管理Bean

1.概述:

从Java5开始,Java增加了对注解(Annotation)的支持,它是代码中的一种特殊标记,可以在编译、类加载和运行时被读取,执行相应的处理。开发人员可以通过注解在不改变原有代码和逻辑的情况下,在源代码中嵌入补充信息。

2.配置流程:

(1)引入相关依赖

(2)开启组件扫描:

Spring默认不使用注解装配Bean,因此我们需要在Spring的XML配置中,通过context:component-scan元素开启Spring Beans的自动扫描功能。开启此功能后,Spring会自动从扫描指定的包(back-package属性设置)及其子包下的所有类,如果类上使用了@Component注解,就将该类装配到容器中。

注意要在xml文件中配置context作用域。

<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-3.0.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">

    <!--开启组件扫描-->
    <context:component-scan base-package="your pakagename"> </context:component-scan>
</beans>

(3)使用注解定义Bean

Spring提供了以下多个注解,这些注解可以直接标注在Java类上,将它们定义成Spring Bean。

注解说明
@Component该注解用于描述Spring中的Bean,是一个泛化的概念,仅仅表示容器的一个组件(Bean),并且可以作用在应用的任何层次,例如Service层,Dao层等。使用时只需将该注解标注在相应的类上即可。
@Repository该注解用于将数据访问层(Dao层)的类标识为Spring中的Bean,其功能与@Component相同。
@Service该注解通常作用在业务层(Service层),用于将业务层的类标识为Spring中的Bean,其功能与@Component相同。
@Controller该注解通常作用在控制层(如SpringMVC的Controller),用于将控制层的类标识为Spring中的Bean,其功能与@Component相同。

各个组件中的(value = "xxx")中,value值就相当于使用xml配置bean中的id值。

package com.atguigu;

import org.springframework.stereotype.Component;

//在测试类中,用context.getBean("user")来获取bean
@Component(value = "user")
public class User {
    public User(){
        System.out.println("创建了用户对象");
    }
}

二、@Autowired注入

1.单独使用@Autowired注解,默认根据类型装配

2.注入方式:

(1)通过属性注入:根据类型找到对应类对象,完成注入

@Autowire
private UserDao userDao;

(2)set方法注入

private UserDao userDao

@Autowired
public void setUserDao(UserDao userDao){
    this.userDao = userDao;
}

(3)构造方法注入

@Autowired
public UserServiceImpl(UserDao userDao){
    this.userDao = userDao;
}

(4)当只有一个构造函数时,可以不加注解

三、@Resource注入

1.概念:

@Resource注解也可以完成属性注入。它和@Autowired注解有什么区别?

Resource注解是JDK扩展包中的,也就是说属于JDK的一部分。所以该注解是标准注解,更具有通用性。
@Autowired注解是Spring框架自己的
@Resource注解默认根据属性名称装配byName,未指定name时,使用属性名作为name。通过name找不到的话会自动通过类型byType装配。
@Autowired注解默认根据类型装配byType。如果想根据名称装配,需要配合@Qualifier一起使用。

@Resource注解用在属性上、setter方法上。
@Autowired注解用在属性上、setter方法上、构造方法上、构造方法参数上。

@Resource注解属于JDK扩展包,需要额外引入依赖:

        <dependency>
            <groupId>jakarta.annotation</groupId>
            <artifactId>jakarta.annotation-api</artifactId>
            <version>2.1.1</version>
        </dependency>

四、全注解式开发

添加配置类,实现对注解的扫描,替代在xml文件中的组件扫描。

package com.atguigu;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration//配置类
@ComponentScan("com.atguigu")
public class Config {
}

现在,直接在测试类中加载配置类就可以扫描并获取bean。

package com.atguigu;

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {
    public static void main(String[] args) {
        //加载配置类
        ApplicationContext context = new AnnotationConfigApplicationContext(Config.class);
        User user = context.getBean(User.class);
        System.out.println(user);
    }
}

  • 26
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值