显然,我们无法在第三方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()注解来讲独立配置文件导入了核心配置文件?。
海事使用上例,例如
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 {
@Override
public void save() {
System.out.println("BookDao saving!");
}
}
接下来,我们肯定是要让核心配置文件扫描这一包的
@ComponentScan("com.cacb.dao")
下面便是引用类型注解的特殊之处,我们需要向配置类传入相应的对象,?
public DataSource dataSource(BookDao bookDao)
?Spring会按类型自动装配