准备工作:
- 导入4个核心包和2个日志包,还需要导入spring-aop.jar
- 配置组件
(@component)扫描:告知spring要扫描哪个包下的类
在配置文件中配置组件扫描:<context:component-scan base-package="com.itheima"></context:component-scan>
原始注解
替代bean的配置 替代属性注入
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl" scope="singleton" init-method="" destroy-method=""></bean>
<property name="" ref=""/>
<property name="" value=""/>
@Component:需要被Spring创建对象的类上面添加@Component(bean的id)注解
@Controller:使用在web层的bean上的
@Service:使用在service层的bean上的
@Repository:(仓库) 使用在dao层的bean上的
@Autowired:自动注入,注意:按照类型进行匹配并注入的
@Qualifier(“userDao”) //按照对象名称(id)进行注入
注意:此处的@Qualifier结合@Autowired一起使用
@Resource(name=”userDao”) //@Autowired+@Qualifier(“userDao”)
@Value(“zhangsan”) 基本不用
@Value(“${jdbc.driver}”) //从spring容器中获得制定的key=jdbc.driver对应的值
@Scope(“singleton、prototype”)
@PostConstruct 初始化方法
@PreDestroy 销毁方法
在开发中,习惯 自定义的bean使用注解配置 非自定义的bean使用配置文件配置(重点)
spring全注解开发
spring的新注解出现的目的是完全替代配置文件
@Configuration //标注该类是一个配置类
@ComponentScan(“com.itheima”) //组件扫描
@Import({ DataSourceConfiguration.class }) //引入其他配置类
@PropertySource(“classpath:jdbc.properties”) //加载properties配置文件
@Configuration //标注该类是一个配置类
//<context:component-scan base-package="com.itheima"></context:component-scan>
@ComponentScan("com.itheima")
//import
@Import({ DataSourceConfiguration.class })
public class SpringConfiguration {
}
方法上使用
@Bean(name=”dataSource”) //Spring会将该方法的返回值以指定的名称存储到spring容器中
@Bean
public static PropertySourcesPlaceholderConfigurer getPropertySourcesPlaceholderConfigurer(){
return new PropertySourcesPlaceholderConfigurer();
}
Spring集成junit
- 导入额外包
spring-test.jar
junit.jar
spring-aop.jar - 编写测试类
package com.itheima.test;
@RunWith(SpringJUnit4ClassRunner.class) //指定测试的类是谁 //@ContextConfiguration(value="classpath:applicationContext.xml") //指定配置文件
@ContextConfiguration(classes={SpringConfiguration.class}) //指定配置类
public class SpringJunitTest {
@Autowired
private UserDao userDao;
@Autowired
private UserService userService;
@Test
public void test1(){
userDao.save();
userService.save();
}
}
spring创建第3方对象
在spring中配置非自定义的bean(数据源、连接池(池化思想) dataSource)
<!-- 在spring容器中加载jdbc.properties -->
<context:property-placeholder location="classpath:jdbc.properties"/>
<!-- 配置数据源实例C3P0 将数据量的连接信息提取到一个properties文件中 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driver}"></property>
<property name="jdbcUrl" value="${jdbc.url}"></property>
<property name="user" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
</bean>
public void test5() throws Exception{
//加载配置文件 创建spring容器
ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
//获得DAtasource
DataSource dataSource = (DataSource) app.getBean("dataSource");
Connection connection = dataSource.getConnection();
System.out.println(connection);
}