• Spring基于注解的装配方式


    基于注解的装配方式

    在Spring中,使用XML配置文件可以实现Bean的装配工作,但在实际开发中如果Bean的数量过多,导致XML配置文件过于臃肿,给后期维护和升级带来一定的困难。为解决此问题,Spring提供了注解,通过注解也可以实现Bean的装配。

    Spring常用注解:

    注解描述
    @Component指定一个普通的Bean,可以作用在任何层次
    @Controller指定一个控制器组件Bean,用于将控制层的类标识为Spring中的Bean,功能上等同于@Component
    @Service指定一个业务逻辑组件Bean,用于将业务逻辑层的类标识为Spring中的Bean,功能上等同于@Component
    @Repository指定一个数据访问组件Bean,用于将数据访问层的类标识为Spring中的Bean,功能上等同于@Component
    @Scope指定Bean实例的作用域
    @Value指定Bean实例的注入值
    @Autowired指定要自动装配的对象
    @Resource指定要注入的对象
    @Qualifier指定要自动装配的对象名称,通常与@Autowired联合使用
    @PostConstruct指定Bean实例完成初始化后调用的方法
    @PreDestroy指定Bean实例销毁前调用的方法

    注解装配示例:

    第一步: 在IDEA中创建新的Maven项目,然后在pom.xml文件中加载需要使用到的Spring四个基础包(spring-core-5.2.8.RELEASE.jar、spring-beans-5.2.8.RELEASE.jar、spring-context-5.2.8.RELEASE.jar、spring-expression-5.2.8.RELEASE.jar)以及Spring的一个依赖包(commons-logging-1.2.jar),除此之外,还要导入spring-aop-5.2.8.RELEASE.jar依赖包:

    1. <dependency>
    2. <groupId>org.springframework</groupId>
    3. <artifactId>spring-aop</artifactId>
    4. <version>5.2.8.RELEASE</version>
    5. </dependency>
    6. 复制代码

    第二步: 创建applicationContext.xml,在该文件中引入Context约束并启动Bean的自动扫描功能(扫描出包下所有的类,进行注解解析)

    1. <context:component-scan base-package="com.hexiaoxing"/>
    2. 复制代码

    第三步: 定义实体类,新建entity包,在entity包下创建User实体类

    1. @Component("student")
    2. @Scope("singleton")
    3. public class User{
    4. @Value("2020001234")
    5. private int stuId;
    6. @Value("何小幸")
    7. private Spring name;
    8. //省略getter、setter和toString()
    9. }
    10. 复制代码

    第四步: 定义dao层,创建StudentDao接口作为数据访问层接口,并在StudentDao接口中声明save()方法,用于查询Student实体的对象信息

    1. package com.hexiaoxing.dao
    2. public interface StudentDao{
    3. public void save();
    4. }
    5. 复制代码

    第五步: 创建StudenDaoImpl作为StudenDao的实现类,并在StudenDaoImpl类中实现StudentDao接口中的save()方法

    1. @Repository("studentDao")
    2. public class UserDaoImpl implements StudentDao{
    3. public void save(){
    4. ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
    5. Student student = (Student)applicationContext.getBean("student");
    6. System.out.println(student);
    7. System.out.println("执行UserDaoImpl.save()");
    8. }
    9. }
    10. 复制代码

    第六步: 定义service层,创建StudentService接口作为业务逻辑层接口,并在StudentService接口中定义save()方法

    1. package com.hexiaoxing.service
    2. public interface StudentService{
    3. public void save();
    4. }
    5. 复制代码

    第七步: 定义service层,创建StudentServiceImpl作为StudentService的实现类,并在StudentServiceImpl类中实现StudentService接口中的save()方法

    1. @Service("studentService")
    2. public class StudentServiceImpl implements StudentService{
    3. //使用@Resource注解注入StudentDao
    4. @Resource(name="studentDao")
    5. private StudentDao studentDao;
    6. public void save(){
    7. this.studentDao.save();
    8. System.out.println("执行StudentServiceImpl.save()");
    9. }
    10. }
    11. 复制代码

    第八步: 定义controller层,创建StudentController类作为控制层

    1. @Controller
    2. public class StudentController{
    3. //使用@Resource注解注入StudentDao
    4. @Resource(name="studentDao")
    5. private StudentService studentService;
    6. public void save(){
    7. this.studentService.save();
    8. System.out.println("执行StudentController.save()");
    9. }
    10. }
    11. 复制代码

    到目前,我们定义了student类,在dao层定义并实现了save()接口方法,方法中获取了student对象,在service中也定义了save来调用dao层的save,就这样,controller->service->dao三层,分别调用上一层的save方法

    第九步: 定义测试类,在类中通过Spring容器加载配置文件并获取UserController实例,然后调用实例中的save()方法,查看结果

  • 相关阅读:
    MySQL批量导入Excel数据【超详细】
    el-table固定指定的行
    安装JDK(不同环境下都有)
    Mysql on duplicate key update用法,注意三点就能上手
    java.sql.SQLException: Cannot set billDate: incompatible types.
    Java:缓存行和伪共享
    如何构建城市经济大脑分析指标框架?六大分析主题
    972信息检索 | 第七章 专类信息的检索
    作业来了~~~
    NLP涉及技术原理和应用简单讲解【一】:paddle(梯度裁剪、ONNX协议、动态图转静态图、推理部署)
  • 原文地址:https://blog.csdn.net/m0_71777195/article/details/128159368