Spring纯注解开发 - 依赖注入、自动装配、注解方式加载properties文件、注解方式管理第三方bean、注解实现第三方bean的依赖注入

Spring纯注解开发 - 依赖注入、自动装配、注解方式加载properties文件、注解方式管理第三方bean、注解实现第三方bean的依赖注入,第1张

注解开发
  • 一、依赖注入 - 自动装配
      • 1、使用@Autowired注解开启自动装配,默认使用按类型装配
          • 1)使用@Repository注解标注数据访问层
          • 2)使用@Service注解标注业务逻辑层
      • 2、使用@Qualifier 注解开启使用指定名称装配
      • 3、使用@Value 注解装配简单类型
  • 二、使用@PropertySource 注解加载properties文件
  • 三、使用注解管理第三方bean
      • 1、定义一个独立的配置类
      • 2、将JdbcConfig 配置类加入核心配置
          • 方式一:导入式 - 推荐使用
          • 方式二:扫描式
  • 四、使用注解实现第三方bean的依赖注入
  • 五、XML配置 VS 注解配置

一、依赖注入 - 自动装配
  • 在使用xml文件配置时,博主写了几篇关于依赖注入的文章,介绍了4种依赖注入,分别是setter注入、构造器注入、自动装配和集合注入,感兴趣的小伙伴可以进入 Spring文章专栏 查看。
  • 在使用注解开发时,我们只需要掌握自动装配的方式就可以了,因为使用注解实现自动装配的方式非常的便捷,也恰好体现了Spring简化开发的特性。
1、使用@Autowired注解开启自动装配,默认使用按类型装配 1)使用@Repository注解标注数据访问层
@Repository
public class BeanDaoImpl implements BeanDao {
    public void save() {
        System.out.println("beanDao save...");
    }
}
2)使用@Service注解标注业务逻辑层
@Service
public class BeanServiceImpl implements BeanService {
    @Autowired
    private BeanDao beanDao;

//    public void setBeanDao(BeanDao beanDao) {
//        this.beanDao = beanDao;
//    }

    public void save() {
        System.out.println("bean service save...");
    }
}
  • 只需在需要注入的成员变量上添加@Autowired注解即可,此时采用的是按类型装配。
  • 不需要提供set方法,因为自动装配是基于反射思想来创建对象的,且通过暴力反射权限修饰为私有的属性。
  • 自动装配默认使用无参构造方法。

如果你想使用名称装配bean对象,请接着往下看。

2、使用@Qualifier 注解开启使用指定名称装配
@Service
public class BeanServiceImpl implements BeanService {
    @Autowired
    @Qualifier("beanDao")
    private BeanDao beanDao;

    public void save() {
        System.out.println("bean service save...");
        beanDao.save();
    }
}
  • 首先需要记住,@Qualifier 注解是必须和@Autowired 注解配合使用的。

除了添加@Qualifier 注解使用名称装配外,@Repository 注解还需要指定名称。

@Repository("beanDao")
public class BeanDaoImpl implements BeanDao {
    public void save() {
        System.out.println("beanDao save...");
    }
}

如果@Repository 注解没有指定名称,或者指定的名称与@Qualifier 注解指定的不一样,会报NoSuchBeanDefinitionException 异常。

引用类型数据通过@Autowired 注解注入,那简单类型如何注入呢?

3、使用@Value 注解装配简单类型
@Service
public class BeanServiceImpl implements BeanService {
    @Value("qdxorigin")
    private String name;
}
  • @Value 注解可以直接在括号中写入值,像上面所示。
  • 也可以使用
@Value("${jdbc.username}")
private String name;

通过" ${} "符号动态取出properties文件中的值,切记:${} 必须写在双引号里面。

二、使用@PropertySource 注解加载properties文件
@Configuration
@ComponentScan({"dao","service"})
@PropertySource("jdbc.properties")
public class SpringConfig {
}
  • @PropertySource 注解只有使用一次,如果需要加载多个配置文件,使用{}配置
@PropertySource({"jdbc.properties","druid.properties"})
  • @PropertySource 注解声明在自定义的配置类中,自定义配置类内容见文章 纯注解开发 。
  • @PropertySource 注解不支持使用 * 号通配符,不能使用
@PropertySource("*.properties")

进行配置

三、使用注解管理第三方bean 1、定义一个独立的配置类
public class JdbcConfig {
    
    @Bean
    public DataSource dataSource(){
        DruidDataSource druidDataSource = new DruidDataSource();
        druidDataSource.setDriverClassName("com.mysql.jdbc.Driver");
        druidDataSource.setUrl("jdbc:mysql://localhost:3306/graduate");
        druidDataSource.setUsername("root");
        druidDataSource.setPassword("200226");
        return druidDataSource;
    }
}
  • 定义方法以次来获得需要管理的bean对象。
  • 在该方法中加上@Bean 注解 表示当前方法的返回值是一个对象。
  • 博主在学习这部分内容时,感觉又回到了手撕代码的环节了,但是对于第三方的bean,我们只能自己手动实现,不能通过注解完成。
2、将JdbcConfig 配置类加入核心配置

通俗的说,就是让JdbcConfig 配置类起作用,有两种实现方式。

方式一:导入式 - 推荐使用

SpringConfig配置类作为整个Spring的配置类,在该配置类中使用@Import 注解导入JdbcConfig 配置类。

@Configuration
@ComponentScan({"dao","service"})
@Import(JdbcConfig.class)
public class SpringConfig {
}
  • @Import 注解也是只能使用一次,如果需要导入多个配置类,需要使用数组的形式配置,如下所示。
@Import({JdbcConfig.class,DruidConfig.class})
方式二:扫描式

在JdbcConfig 类上加入@Configuration 注解,直接表明该类也是一个配置类。

@Configuration
public class JdbcConfig {
    @Bean
    public DataSource dataSource(){
        DruidDataSource druidDataSource = new DruidDataSource();
        druidDataSource.setDriverClassName("com.mysql.jdbc.Driver");
        druidDataSource.setUrl("jdbc:mysql://localhost:3306/graduate");
        druidDataSource.setUsername("root");
        druidDataSource.setPassword("123456");
        return druidDataSource;
    }
}

然后通过扫描包的形式将该类加载进核心配置。

@Configuration
@ComponentScan({"qdxorigin.config","qdxorigin.dao","qdxorigin.service"})
public class SpringConfig {
}
四、使用注解实现第三方bean的依赖注入

以创建DruidDataSource 对象为例。

public class JdbcConfig {

    @Value("${jdbc.driver}")
    private String driver;
    @Value("${jdbc.url}")
    private String url;
    @Value("${jdbc.username}")
    private String username;
    @Value("${jdbc.password}")
    private String password;

    @Bean
    public DataSource dataSource(BeanDao beanDao){
        DruidDataSource druidDataSource = new DruidDataSource();
        druidDataSource.setDriverClassName(driver);
        druidDataSource.setUrl(url);
        druidDataSource.setUsername(username);
        druidDataSource.setPassword(password);
        beanDao.save();
        return druidDataSource;
    }
}
  • 对于简单类型的依赖注入,将其定义为成员变量,然后使用@Value 注解赋值即可。
  • 对于引用类型的依赖注入,直接将其写入方法形参中,在方法体中直接调用即可,容器会根据类型自动装配。
五、XML配置 VS 注解配置

  • 总的来说,博主更喜欢使用注解进行开发,因为确实非常的简捷。
  • 如果想要了解更多内容,可以进入博主主页,寻找专栏 Spring 查看,该栏里的内容是博主对Spring相关知识的总结。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/920953.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)

保存