Spring-注解开发

本文详细介绍了Spring框架中的注解开发,包括如何使用@Component定义bean、配置组件扫描、依赖注入(@Autowired)以及自动装配(简单类型和引用类型)。还展示了如何使用@Configuration和第三方bean管理,如Druid数据库连接池的配置。
摘要由CSDN通过智能技术生成

Spring-注解开发

一、注解开发

1.1 注解开发定义bean

  • 1.使用@Component定义bean

    /**
     * @author: sea
     * @date: 2023/7/03 14:20
     */
    
    //使用@Component定义bean
    @Component("bookDao")
    public class BookDaoImpl implements BookDao {
        @Override
        public void save() {
            System.out.println("bookDao saving ... ");
        }
    }
    
  • 2.在配置文件中配置组件扫描加载bean

    <?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
                http://www.springframework.org/schema/context/spring-context.xsd
                ">
        <!--  2.配置组件扫描加载bean  -->
        <context:component-scan base-package="com.sea.*"/>
    
    </beans>
    
  • 补充:Spring提供@Component注解的三个衍生注解:

    • @Service:用于业务层bean定义;
    • @Controller:用于表现层bean定义;
    • @Repository:用于数据层bean定义;
  • 【三个衍生注解功能与@Component相同,仅方便区分!!】

1.2 纯注解开发

  • Spring3.0升级了纯注解开发模式,使用Java类代替配置文件。

  • 实现:

    • 1.新建配置类代替配置文件:添加@Configuration注解修饰;@ComponentScan配置组件扫描路径;

      /**
       * @author: sea
       * @date: 2023/7/4 14:49
       */
      @Configuration
      @ComponentScan({"com.sea.dao", "com.sea.service"})
      public class SpringConfig {
      
      }
      
    • 2.使用新的接口实现类获取Spring容器;

      //AnnotationConfigApplicationContext接口实现类获取Spring容器,传入的参数为 配置类.class
      ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);
      BookService bookService = (BookService) ctx.getBean("bookService");
      bookService.save();
      

二、依赖注入-自动装配

2.1 自动装配-引用类型

  • 即使用@Autowired注解进行自动装配;【一般是按bean的类型装配,也可以按bean名称装配】

  • 如下:

    /**
     * @author: sea
     * @date: 2023/7/4 15:58
     */
    @Service("bookService")
    public class BookServiceImpl implements BookService {
        @Autowired
        @Qualifier("bookDao2")//相同类型的bean有多个,可以指定注入bean的名称
        private BookDao bookDao;
        @Override
        public void save() {
            System.out.println("BookService saving ... ");
            bookDao.save();
        }
    }
    
  • 注意:

    • 1.自动装配基于反射机制,能够创建对象并访问私有属性,因此可以不写set方法;
    • 2.需要提供默认无参构造函数,否则无法创建bean对象;
    • 3.相同类型的bean有多个时,可以使用@Qualifier指定注入bean的名称;【此处必须配合@Autowired注解使用!】

2.2 自动装配-简单类型

  • 可以通过@Value注解直接给简单类型装配值:

    @Value("abcdefg")
    String name;
    
  • 也可以通过加载properties文件来装配:

    • jdbc.properties文件
    name=sea
    age=18
    
    • SpringConfig类
    @Configuration
    @ComponentScan({"com.sea.*"})
    @PropertySource("classpath:jdbc.properties")
    //此处若有多个properties文件,使用数组形式,不能使用通配符 *
    public class SpringConfig {
        
    }
    
    • BookDaompl类
    public class BookDaoImpl implements BookDao {
        @Value("${name}")
        String name;
        @Value("${age}")
        int age;
        @Override
        public void save() {
            System.out.println("BookDao saving ... [" + name + ", "+ age + "]");
        }
    }
    

2.3 第三方bean管理

  • 例如,需要配置Druid数据库连接池。【前置工作:导入Druid坐标,刷新Maven】

  • **方式一:**直接在Spring配置类中增加一个方法,用于配置

    /**
     * @author: sea
     * @date: 2023/7/4 16:45
     */
    @Configuration
    @ComponentScan("com.sea.*")
    public class SpringConfig {
    		//1.定义一个方法获取要管理的bean对象
        //2.给该方法的返回值添加@Bean,定义成Bean对象
        @Bean("dataSource_druid")
        public DataSource dataSource(){
            DruidDataSource druidDataSource = new DruidDataSource();
            druidDataSource.setDriverClassName("com.mysql.jdbc.Driver");
            druidDataSource.setUrl("dbc:mysql://localhost:3306/springdb");
            druidDataSource.setUsername("root");
            druidDataSource.setPassword("123456");
    
            return druidDataSource;
        }
    }
    
  • **方式二:**增加一个配置类JdbcConfig进行数据库连接池配置

    /**
     * @author: sea
     * @date: 2023/7/4 16:57
     */
    
    public class JdbcConfig {
        //1.定义一个方法获取要管理的bean对象
        //2.给该方法的返回值添加@Bean,定义成Bean对象
        @Bean("dataSource_druid")
        public DataSource dataSource(){
            DruidDataSource druidDataSource = new DruidDataSource();
            druidDataSource.setDriverClassName("com.mysql.jdbc.Driver");
            druidDataSource.setUrl("dbc:mysql://localhost:3306/springdb");
            druidDataSource.setUsername("root");
            druidDataSource.setPassword("123456");
    
            return druidDataSource;
        }
    }
    
    /**
     * @author: sea
     * @date: 2023/7/4 16:45
     */
    @Configuration
    @ComponentScan("com.sea.*")
    @Import({JdbcConfig.class})//使用@Import注解将配置类引入即可
    public class SpringConfig {
    
    }
    
    
  • 向第三方bean注入简单类型和引用类型:

    /**
     * @author: sea
     * @date: 2023/7/4 16:57
     */
    
    @PropertySource("classpath:mysql.properties")
    public class JdbcConfig {
        @Value("${driver}")
        private String driver;
        @Value("${url}")
        private String url;
        @Value("${username}")
        private String username;
        @Value("${password}")
        private String password;
    
        //1.定义一个方法获取要管理的bean对象
        //2.给该方法的返回值添加@Bean,定义成Bean对象
        //3.注入引用类型【通过方法参数形式自动装配(按类型装配)】
        @Bean("dataSource_druid")
        public DataSource dataSource(BookDao bookDao){
            System.out.println(bookDao); 
    
            DruidDataSource druidDataSource = new DruidDataSource();
            druidDataSource.setDriverClassName(driver);
            druidDataSource.setUrl(url);
            druidDataSource.setUsername(username);
            druidDataSource.setPassword(password);
    
            return druidDataSource;
        }
    }
    
    /**
     * @author: sea
     * @date: 2023/7/4 16:45
     */
    @Configuration
    @ComponentScan("com.sea.*")//配置了组件扫描后,Spring容器初始化时就会创建扫描到的bean
    @Import({JdbcConfig.class})//使用@Import注解将配置类引入即可
    public class SpringConfig {
    
    }
    

三、注解开发和xml配置对比

  • 看图:

    在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

SEA-365

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

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

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

打赏作者

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

抵扣说明:

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

余额充值