Spring IoC 容器配置(全注解方式 )
去除applicationContext.xml实现简单的spring,把bean交给spring容器管理,获取属性的注入
定义一个配置类:
@Configuration
用于指定当前类是一个 spring 配置类,当创建容器时会从该类上加载注解。获取容器时需要使用AnnotationApplicationContext(有@Configuration 注解的类.class)。
@ComponentScan
用于指定 spring 在初始化容器时要扫描的包。作用和在 spring 的 xml 配置文件中的:<context:component-scan base-package="com.itheima"/>是一样的。
@Configuration @ComponentScan(basePackages = "com.zl.spring") //类似于xml中<context:component-scan> 扫描注解 //加载多个文件//@ComponentScan(basePackages = {"",""}) @Import(JdbcConfig.class) //导入其他配置类 public class SpringConfiguration { }
@Import
用于导入其他配置类,在引入其他配置类时,可以不用再写@Configuration 注解。当然,写上也没问题
@PropertySource
用于加载.properties 文件中的配置。例如我们配置数据源时,可以把连接数据库的信息写到properties 配置文件中,就可以使用此注解指定 properties 配置文件的位置。
@Bean
该注解只能写在方法上,表明使用此方法创建一个对象,并且放入 spring 容器。把这个方法的返回的对象添加到Spring容器
//可写可不写,提高可读性 @Configuration @PropertySource("classpath:db.properties") //加载properties中的文件,classpath: 类路径 public class JdbcConfig { @Value("${jdbc.driverClassName}") private String driverClass; @Value("${jdbc.url}") private String jdbcUrl; @Value("${jdbc.user}") private String username; @Value("${jdbc.password}") private String password; //给连接池的数据源: c3p0 赋四大参数 @Bean("dataSource") public DataSource createDataSource() { ComboPooledDataSource ds = new ComboPooledDataSource(); try { ds.setDriverClass(driverClass); ds.setJdbcUrl(jdbcUrl); ds.setUser(username); ds.setPassword(password); } catch (PropertyVetoException e) { e.printStackTrace(); return null; } return ds; } //给Dbutils工具类,注入添加数据源 @Bean("queryRunner") @Scope("prototype") //设置为多例 public QueryRunner createQueryRunner(@Qualifier("dataSource") DataSource ds) { //获取制定数据源,每次都拿同一个数据源 return new QueryRunner(ds); } }
userDaoImpl同样的获取方式:
@Repository("userDao") public class UserDaoImpl implements IUserDao { @Autowired //根据类型 推荐使用 @Qualifier("queryRunner") //根据id private QueryRunner runner;
userServiceImpl同样的获取方式:
@Service("userService") public class UserServiceImpl implements IUserService { //使用@Resource 注解实现注入 ,不写name按类型 @Resource(name="userDao") private IUserDao userDao;
测试类:使用 AnnotationConfigApplicationContext 获取 ApplicationContext 对象
private IUserService userService; @Before public void setUp() throws Exception { ApplicationContext applicationContext = new AnnotationConfigApplicationContext(SpringConfiguration.class); userService = applicationContext.getBean(IUserService.class); }