Spring纯注解开发上篇(包含Component、Configuration、ComponentScan、Scope、PostConstruct、PreDestroy注解)

2年前 (2022) 程序员胖胖胖虎阿
362 0 0

文章目录

  • 💨更多相关知识👇
    • Spring纯注解开发
      • (1)@Component注解开发定义bean(在IOC容器创建对象)
        • ⭐代码演示
      • (2)@Component注解的三个衍生注解
        • ⭐代码演示
      • (3)@Configuration纯注解开发和@ComponentScan注解使用
        • 🌟配置文件到纯注解开发演变图
        • ⭐代码演示
      • (4)bean的作用范围
        • ⭐singleton代码演示
        • ⭐prototype代码演示
      • (5)bean的生命周期
        • ⭐代码演示
  • 作者:KJ.JK

💨更多相关知识👇

💖Spring中的创建对象的三种方式、第三方资源配置管理详细描述及使用(XML版完结篇)

💖Spring中的bean的配置、作用范围、生命周期详细描述及使用(XML版上篇)

💖Spring中的依赖注入、setter与构造器注入、自动装配与集合注入详细描述及使用(XML版中篇)

💖异常处理与解决方案详解上篇

💖异常处理与解决方案详解下篇

💖Math类与System类的常用方法使用

💖JavaEE中的静态方法定义、方法重载要求、return作用详解

💖List接口的常用方法,精华总结

💖JavaEE中的Stream流的常用方法

💖JavaEE中的Stream流知识点使用,精华总结,一文直接上手


🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈
 
🍂个人博客首页: KJ.JK
 
欢迎大家点赞👍收藏💖评论💬关注🔒
 
💖源码获取 | 💻学习交流 | 🤝商务合作 | 💨私信作者
 
💨推荐一款实用的模拟面试、刷题练习算法的神器、适用于所有的程序猿👉点击开始免费刷题,跟着博主走上巅峰💪


Spring纯注解开发


(1)@Component注解开发定义bean(在IOC容器创建对象)

              "注解开发定义bean顺序:"
                  
                  1.在所有需要放到容器中的类,在类上使用@Component注解
                  
                    @Component("bookDao")     
                    public class BookDaoImpl implements BookDao {
                      
                    }

                    @Component   //如果没有指定id,则使用类名首字母小写做为id,即:bookServiceImpl
                    public class BookServiceImpl implements BookService {
                         
                    }


                      2.核心配置文件中通过基包扫描加载bean   "(会扫描这个包和它所有的子包)"
                          
                         <context:component-scan base-package="com.itheima"/>

/*
  注意:
       @Component("bookDao") // 配置了Component注解的类,IoC容器就会创建该类的对象,并放到容器中, id名字叫bookDao 
       
       @Component // 如果没有指定id,自动取id名字: 类名首字母变小写 如: (BookServiceImpl -> id:bookServiceImpl)
*/



⭐代码演示

// BookDaoImpl类

@Component("bookDao") // 配置了Component注解的类,IoC容器就会创建该类的对象,并放到容器中, id名字叫bookDao
public class BookDaoImpl implements BookDao {
    public void save() {
        System.out.println("book dao save ..." );
    }
}

------------------------------------------------------------------------------------------------------------

//BookServiceImpl类
@Component// 没有指定id,自动取id名字: 类名首字母变小写(bookServiceImpl)
public class BookServiceImpl implements BookService {
    private BookDao bookDao;

    public void setBookDao(BookDao bookDao) {

        this.bookDao = bookDao;
    }

    public void save() {
        System.out.println("book service save ...");
    }
}

------------------------------------------------------------------------------------------------------------

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



    <!--组件扫描: 去指定包中和子包中找带有
           @Component 的类并创建对象放到容器中
        base-package: 基包, 指定要查找包和子包-->

    <context:component-scan base-package="com.itheima"/>



</beans>

------------------------------------------------------------------------------------------------------------

//测试类

public class AnnotationTest {
    @Test
    public void test01() {
        // 1.加载类路径下的配置文件
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

        // 2.使用名称获取bean

        BookDao bookDao =   (BookDao) context.getBean("bookDao");
        bookDao.save();




        BookService bookService = (BookService) context.getBean("bookServiceImpl");
        bookService.save();

        // 3.关闭容器
        context.close();
    }
}



Spring纯注解开发上篇(包含Component、Configuration、ComponentScan、Scope、PostConstruct、PreDestroy注解)


(2)@Component注解的三个衍生注解

                    * @Controller:用于"表现层bean定义"    //Controller注解不能使用其它的注解代替
                    
                    * @Service: 用于"业务层bean定义"         "(service类)"
                    
                    * @Repository: 用于"数据层bean定义"      " (Dao层注解,接口类)"

⭐代码演示

Spring纯注解开发上篇(包含Component、Configuration、ComponentScan、Scope、PostConstruct、PreDestroy注解)


(3)@Configuration纯注解开发和@ComponentScan注解使用

                 * Spring3.0开启了"纯注解开发模式",使用"Java类替代配置文件",开启了Spring快速开发赛道
                 
                 * Java类代替Spring核心配置文件
                 
                     
                 * "@Configuration注解" : "用于设定当前类为配置类"     
                                 //(有这个注解的并且@ComponentScan配置了扫描的路径就会被带上车)
                        //Spring在启动的时候会自动扫描并加载所有配置类,然后将配置 类中bean放入容器
                     
                 * "@ComponentScan注解" : "用于设定基包扫描路径",此注解只能添加一次,"多个数据请用数组格式{}"
                                      //扫描包或子包中类里面和Spring相关的注解
                              //针对标注了@Controller、@Service、@Repository、@Component 的类都可以别spring扫描到: @ComponentScan({"com.itheima.service","com.itheima.dao"})
                       //相当于扫描到带有注解的带它上车
                   

                 * 读取Spring核心配置文件初始化容器对象切换为"读取Java配置类初始化容器对象"
                     
                                                                    //加载配置文件初始化容器    
               ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");

                                                                   //加载配置类初始化容器
               ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);

                     
------------------------------------------------------------------------------------------------------------
    
         "纯注解开发顺序"

                      1.用一个Java类来写"@Configuration注解" (设定当前类为配置类,代替Spring的配置类文件)
                                  "@ComponentScan注解" (设定基包扫描路径)
    
                      2.读取Java配置类初始化容器对象

             ApplicationContext ctx = new AnnotationConfigApplicationContext("java配置类.class");


🌟配置文件到纯注解开发演变图

Spring纯注解开发上篇(包含Component、Configuration、ComponentScan、Scope、PostConstruct、PreDestroy注解)


⭐代码演示

//java类代替配置文件
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.PropertySource;

@Configuration // Spring的配置类, 相当于applicationContext.xml

@ComponentScan({"com.itheima.dao", "com.itheima.service", "com.itheima.util"}) // 相当于基包扫描



public class SpringConfig {

}

------------------------------------------------------------------------------------------------------------

//测试类
    @Test
    public void test01() {
        // 1.加载配置类
         AnnotationConfigApplicationContext context =
                 new AnnotationConfigApplicationContext(SpringConfig.class);

        // 2.获取bean
        BookDao bookDao1 = (BookDao) context.getBean("bookDao");
        bookDao1.save();


        BookService bookService  = (BookService) context.getBean("bookServiceImpl");
        bookService.save();


        // 3.关闭容器
         context.close();
    }


Spring纯注解开发上篇(包含Component、Configuration、ComponentScan、Scope、PostConstruct、PreDestroy注解)


(4)bean的作用范围

                          * 使用"@Scope"注解定义bean作用范围
                               
                          * 范例
                              
                              @Component
                              @Scope("singleton")
                              public class BookDaoImpl {
                                  
                              }
/*
   singleton : 单例
   prototype : 多例
*/

⭐singleton代码演示

//作用范围类
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

// @Component("bookDao") // 指定id为bookDao
@Repository("bookDao")

 @Scope("singleton") // singleton: 单例    prototype: 多例
public class BookDaoImpl implements BookDao {
    public void save() {

        System.out.println("book dao save ..." );
    }
}

------------------------------------------------------------------------------------------------------------

//测试类
    @Test
    public void test01() {
        // 1.加载配置类
         AnnotationConfigApplicationContext context =
                 new AnnotationConfigApplicationContext(SpringConfig.class);

        // 2.获取bean
        BookDao bookDao1 = (BookDao) context.getBean("bookDao");
        BookDao bookDao2 = (BookDao) context.getBean("bookDao");

        bookDao1.save();

        System.out.println("同一个对象: " + (bookDao1 == bookDao2));


        BookService bookService = (BookService) context.getBean("bookServiceImpl");
        bookService.save();


        // 3.关闭容器
         context.close();
    }    

Spring纯注解开发上篇(包含Component、Configuration、ComponentScan、Scope、PostConstruct、PreDestroy注解)


⭐prototype代码演示

//作用范围类
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

// @Component("bookDao") // 指定id为bookDao
@Repository("bookDao")

 @Scope("prototype") // singleton: 单例    prototype: 多例
public class BookDaoImpl implements BookDao {
    public void save() {

        System.out.println("book dao save ..." );
    }
}

------------------------------------------------------------------------------------------------------------

//测试类
    @Test
    public void test01() {
        // 1.加载配置类
         AnnotationConfigApplicationContext context =
                 new AnnotationConfigApplicationContext(SpringConfig.class);

        // 2.获取bean
        BookDao bookDao1 = (BookDao) context.getBean("bookDao");
        BookDao bookDao2 = (BookDao) context.getBean("bookDao");

        bookDao1.save();

        System.out.println("同一个对象: " + (bookDao1 == bookDao2));


        BookService bookService = (BookService) context.getBean("bookServiceImpl");
        bookService.save();


        // 3.关闭容器
         context.close();
    }    

Spring纯注解开发上篇(包含Component、Configuration、ComponentScan、Scope、PostConstruct、PreDestroy注解)


(5)bean的生命周期

                 * 使用 "@PostConstruct""@PreDestroy" 定义bean生命周期
                     
                 * 这两个注解不是Spring框架提供的,由JDK提供的,但"JDK9.0以后去掉了",所以高版本使用要在pom.xml导包
                     
                             <dependency>
                                  <groupId>javax.annotation</groupId>
                                  <artifactId>javax.annotation-api</artifactId>
                                  <version>1.3.2</version>
                             </dependency>

                     
                 * "@PostConstruct": 初始化方法,"构造器后执行"
                     
                 * "@PreDestroy" : 销毁方法,"对象销毁前执行"   //对多例模式无效


⭐代码演示

//生命周期类
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

// @Component("bookDao") // 指定id为bookDao
@Repository("bookDao")

 @Scope("singleton") // singleton: 单例    prototype: 多例
public class BookDaoImpl implements BookDao {
    public void save() {

        System.out.println("book dao save ..." );
    }

    // 初始化方法, 在构造器后执行
     @PostConstruct      //bean初始化容器注解
    public void init() {

        System.out.println("BookDaoImpl 初始化完毕!");
    }


    // 销毁方法, 在对象销毁前执行
     @PreDestroy        //bean销毁容器注解
    public void destroy() {

        System.out.println("BookDaoImpl 销毁了!");
    }

}

------------------------------------------------------------------------------------------------------------

//测试类
 @Test
    public void test01() {
        // 1.加载配置类
         AnnotationConfigApplicationContext context =
                 new AnnotationConfigApplicationContext(SpringConfig.class);

        // 2.获取bean
        BookDao bookDao1 = (BookDao) context.getBean("bookDao");
        BookDao bookDao2 = (BookDao) context.getBean("bookDao");

        bookDao1.save();

        System.out.println("同一个对象: " + (bookDao1 == bookDao2));


        BookService bookService = (BookService) context.getBean("bookServiceImpl");
        bookService.save();


        // 3.关闭容器
         context.close();
    }


Spring纯注解开发上篇(包含Component、Configuration、ComponentScan、Scope、PostConstruct、PreDestroy注解)


作者:KJ.JK

文章对你有所帮助的话,欢迎给个赞或者 star,你的支持是对作者最大的鼓励,不足之处可以在评论区多多指正,交流学习

相关文章

暂无评论

暂无评论...