Spring的IOC/DI对应的配置开发已经学习过,但是使用起来相对来说还是比较复杂的,复杂的地方在配置文件。
在学习Spring的时候学过,Spring可以简化代码的开发,到现在并没有体会到。 所以Spring到底是如何简化代码开发的呢? 要想真正简化开发,就需要用到Spring的注解开发。
Spring对注解支持的版本历程: 2.0版开始支持注解 2.5版注解功能趋于完善 3.0版支持纯注解开发
注解开发定义bean
@Component注解如果不起名称,会有一个默认值就是当前类名首字母小写,所以也可以按照名称获取
不加id也可以用类型查找bean
component-scan
component:组件,Spring将管理的bean视作自己的一个组件
scan:扫描 base-package指定Spring框架扫描的包路径,它会扫描指定包及其子包中的所有类上的注解。 包路径越多[如:com.itheima.dao.impl],扫描的范围越小速度越快 包路径越少[如:com.itheima],扫描的范围越大速度越慢 一般扫描到项目的组织名称即Maven的groupId下[如:com.itheima]即可。
纯注解开发
纯注解开发模式,使用java类替代xml配置文件
新建一包,包下新建控制类文件SpringConfig.java
运行类用来实现操作
运行成功
注解开发定义bean的作用范围
将对象变成非单例
注解开发定义bean的生命周期
PostConstructor //构造方法后执行
PreDestory //销毁前执行
注意destroy只有容器关闭的时候才会执行,所以要ctx.close(),才能看到destroy执行
总结,注解开发和配置文件开发的区别
注解开发注入对象mian
配置方法注入对象使用setter方法和配置bean的property属性
注解开发可以省略setter方法,免去property属性
只需在注入的对象前面加上@Autowired(自动装配)
@Autowired是按照类型注入,那么对应BookDao接口如果有多个实现类,比如添加 BookDaoImpl2,此时按照类型注入就无法区分注入哪个对象
解决方法是按照名称注入
@Qualifier,定义注入bean对象的名称 (必须和@Autowired配合使用)
简单数据类型注入
简单类型注入的是基本数据类型或者字符串类型,下 面在BookDaoImpl类中添加一个name属性,用其进行简单类型注入
注意在配置文件中要添加
@PropertySource("jdbc.properties") //用于设定value值的搜索路径
@value
@Value一般会被用在从properties配置文件中读取内容进行使用
注解开发管理第三方bean
@Bean
新建数据库连接配置文件jdbcConfig.java
public class JdbcConfig {
@Bean //@Bean注解的作用是将方法的返回值制作为Spring管理的一个bean对象
public DataSource dataSource(){
DruidDataSource ds = new DruidDataSource();
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUrl("jdbc:mysql://localhost:3306/spring_01");
ds.setUsername("mysql");
ds.setPassword("xhsxcsjcnh");
return ds;
}
}
这个配置类要能够被Spring配置类加载到,使用@Import
@Configuration
//@ComponentScan("com.itheima.config")
@Import({JdbcConfig.class})
public class SpringConfig {
}
注解开发心得
实现类加入到容器中,要使用
@Component
配置类中可以扫描到要Bean对象,才能从容器中获得对象,所以需要用到
@ComponentScan