注解开发管理第三方Bean
显然,我们无法在第三方Bean中写入诸如@service这样的注解,所以,Spring为我们提供了@Bean这一注解来让我们通过注解管理第三方Bean
第二种导入方式由于可读性太低,故只介绍第一种导入方式,这里我们以导入阿里巴巴的Druid为例
由于直接在SpringConfig这个我们设计的Spring配置文件中写所有的文件会导致该文件十分臃肿,所以我们选用给每一个外部第三方Bean都书写他们独立的配置文件,下面看示例:
package com.cacb.config;import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.context.annotation.Bean;import javax.sql.DataSource;public class JbdcConfig {//定义一个方法获得要管理的对象@Bean("dataSource")public DataSource dataSource(){DruidDataSource ds = new DruidDataSource();ds.setDriverClassName("com.mysql.jbdc.Driver");ds.setUrl("jbdc:mysql://localhost:3306/cary_cacb");ds.setUsername("root");ds.setPassword("password");return ds;}
}
再看SpringConfig也就是核心配置类中的书写:
@Configuration
@Import(JbdcConfig.class)
public class SpringConfig {}
可以看到我们通过@Import()注解来讲独立配置文件导入了核心配置文件 。
注解开发为第三方Bean注入资源
简单类型
海事使用上例,例如
DruidDataSource ds = new DruidDataSource();ds.setDriverClassName("com.mysql.jbdc.Driver");ds.setUrl("jbdc:mysql://localhost:3306/cary_cacb");ds.setUsername("root");ds.setPassword("password");
这些方法中传入的内容应该来自于Properties文件,所以我们应该使用注解注入这些类型,方法如下(只用classname举例)
@Value("com.mysql.jbdc.Driver")
private String classname;
//...ds.setDriverClassName("com.mysql.jbdc.Driver");
引用类型
例如,我们要传入com.cacb.dao包中的BookDaoImpl这一Bean
首先,要使用注解将BookDaoImpl配置为Bean
package com.cacb.dao.Impl;import com.cacb.dao.BookDao;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Repository;@Repository
public class BookDaoImpl implements BookDao {@Overridepublic void save() {System.out.println("BookDao saving!");}
}
接下来,我们肯定是要让核心配置文件扫描这一包的
@ComponentScan("com.cacb.dao")
下面便是引用类型注解的特殊之处,我们需要向配置类传入相应的对象,
public DataSource dataSource(BookDao bookDao)
Spring会按类型自动装配