- 一、依赖注入 - 自动装配
- 1、使用@Autowired注解开启自动装配,默认使用按类型装配
- 1)使用@Repository注解标注数据访问层
- 2)使用@Service注解标注业务逻辑层
- 2、使用@Qualifier 注解开启使用指定名称装配
- 3、使用@Value 注解装配简单类型
- 二、使用@PropertySource 注解加载properties文件
- 三、使用注解管理第三方bean
- 1、定义一个独立的配置类
- 2、将JdbcConfig 配置类加入核心配置
- 方式一:导入式 - 推荐使用
- 方式二:扫描式
- 四、使用注解实现第三方bean的依赖注入
- 五、XML配置 VS 注解配置
- 在使用xml文件配置时,博主写了几篇关于依赖注入的文章,介绍了4种依赖注入,分别是setter注入、构造器注入、自动装配和集合注入,感兴趣的小伙伴可以进入 Spring文章专栏 查看。
- 在使用注解开发时,我们只需要掌握自动装配的方式就可以了,因为使用注解实现自动装配的方式非常的便捷,也恰好体现了Spring简化开发的特性。
@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,我们只能自己手动实现,不能通过注解完成。
通俗的说,就是让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 注解赋值即可。
- 对于引用类型的依赖注入,直接将其写入方法形参中,在方法体中直接调用即可,容器会根据类型自动装配。
- 总的来说,博主更喜欢使用注解进行开发,因为确实非常的简捷。
- 如果想要了解更多内容,可以进入博主主页,寻找专栏 Spring 查看,该栏里的内容是博主对Spring相关知识的总结。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)