3.注解
1.1注解开发定义bean
-
使用@Component定义bean
@Component("bookDao") public class BookDaoImpl implements BookDao{} @Component public class BookServiceImpl implements BookService{}
-
核心配置文件中通过组件扫描加载bean
<context:component-scan base-package="com.wen"/>
1.2纯注解开发
-
java类代替Spring核心配置文件
//声明当前类为Spring配置类 @Configuration //设置bean扫描路径,多个路径书写为字符串数组格式 @ComponentScan({"com.wen.service", "com.wen.dao"}) public class SpringConfig { }
-
@Configuration注解用于设定当前类为配置
-
@Configuration注解用于设定扫描路径,此注解只能添加一次,多个数据请用数组格式
@ComponentScan({"com.wen.service", "com.wen.dao"})
-
读取Spring核心配置文件初始化容器对象切换为读取Java配置类初始化容器对象
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); //AnnotationConfigApplicationContext加载Spring配置类初始化Spring容器 ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);
1.3bean作用范围
-
使用@Scope定义bean作用范围
@Repository //@Scope设置bean的作用范围 @Scope("singleton") public class BookDaoImpl implements BookDao { }
-
使用@PostConstruct.@PreDestory定义bean生命周期
@Repository //@Scope设置bean的作用范围 @Scope("singleton") public class BookDaoImpl implements BookDao { public void save() { System.out.println("book dao save ..."); } //@PostConstruct设置bean的初始化方法 @PostConstruct public void init() { System.out.println("init ..."); } //@PreDestroy设置bean的销毁方法 @PreDestroy public void destroy() { System.out.println("destroy ..."); } }
2.1依赖注入
-
使用@Qualifier注解开启指定名称装配bean
@Service public class BookServiceImpl implements BookService { //@Autowired:注入引用类型,自动装配模式,默认按类型装配 @Autowired //@Qualifier:自动装配bean时按bean名称装配 @Qualifier("bookDao") private BookDao bookDao; public void save() { System.out.println("book service save ..."); bookDao.save(); } }
注意: @Qualifiler注解无法单独使用,必须配合@Autowired注解使用
-
使用@Value实现简单类型注入
//@Value:注入简单类型(无需提供set方法) @Value("${name}") private String name;
-
加载properties文件
-
使用@PropertySource注解加载properties文件
@Configuration @ComponentScan("com.wen") //@PropertySource加载properties配置文件 @PropertySource({"jdbc.properties"}) public class SpringConfig { }
-
注意:路径仅仅支持单一文件配置,多文件请使用数组格式配置,不允许使用通配符*
-
2.2第三方bean管理,第三方依赖注入
-
使用@Bean配置第三方bean
-
使用Import注解手动加入配置类到核心配置,此注解只能添加一次,多个请使用数组格式
@Configuration @ComponentScan("com.wen") //@Import:导入配置信息 @Import({JdbcConfig.class}) public class SpringConfig { } public class JdbcConfig { //1.定义一个方法获得要管理的对象 @Value("com.mysql.jdbc.Driver") private String driver; @Value("jdbc:mysql://localhost:3306/spring_db") private String url; @Value("root") private String userName; @Value("root") private String password; //2.添加@Bean,表示当前方法的返回值是一个bean //@Bean修饰的方法,形参根据类型自动装配 @Bean public DataSource dataSource(){ DruidDataSource ds = new DruidDataSource(); ds.setDriverClassName(driver); ds.setUrl(url); ds.setUsername(userName); ds.setPassword(password); return ds; } }
-
引用类型依赖注入
@Bean public DataSource dataSource(BookDao bookDao){ System.out.println(bookDao); DruidDataSource ds = new DruidDataSource(); ds.setDriverClassName(driver); ds.setUrl(url); ds.setUsername(userName); ds.setPassword(password); return ds; }
-
引用类型注入只需要为bean定义方法设置形参即可,容器会根据类型自动装配