由XML转向注解开发!
我们之前是使用XML的方式来让Spring帮我们创建对象的,这样看起来非常麻烦,那么我们有没有什么简单的方式呢,答案是有的。
接下来我来告诉大家注解是怎么一步一步的取代xml配置的
第一步:在xml文件中告诉Spring要扫描的包,这样注解才会生效
<context:component-scan base-package="com.albb"/>
第二步:Bean标签创建对象通过以下注解取代
@Component 用在类上,相当于是Bean标签,id就是该类的类名首字母小写
@Controller 用在web层上,相当于是Bean标签
@Service 用在Service层上,相当于是Bean标签
@Repository 用在dao层,配置一个Bean
@Contorller,@Service,@Repository都相当于是@Component衍生出来的注解
@Scope:配置Bean的作用范围,相当于bean的scope属性,用在类上
@PostConstruct是指bean的初始化方法,用在初始化方法头上
@PreDestory是指定bean的销毁方法,用在销毁方法上
第三步:依赖注入的注解
@AutoWired 相当于<property name="" ref="" ></property>
@Qualifer(要注入的bean的名称) 结合AutoWired使用,可以设置它的属性id,然后通过id来注入依赖
@Resource(要注入的bean的名称):相当于@autoWired+@Qualifer
@Value(普通值)
@Value("${properties里的key}")
相当于property标签的value,注入普通属性<Property name="" value=""> </Property>
使用注解注入时,不需要使用set方法
纯注解开发
1.创建一个配置类,打上@Configuration注解,
2.@CompoentScan(包名),用在配置类上,表示开启注解扫描
3.@ProperSource(配置文件),用在配置类上,加载properties文件,使用value属性指定properties的指定路径
4.@Import 用在配置类上,引入子配置类,用value属性指定子配置类的class
5.@Bean 用在配置类的方法上,把返回值声明为一个Bean,用name/value属性指定bean的id
/*
3.使用@Bean注解标记的方法,方法内部需要用到spring工厂(容器)里面的某一个对象,怎么办?
3.1 此时可以在方法的参数上,写上想要的对象参数即可
a. 其实它就是在方法参数的前面,隐藏着一个注解: @Autowired
3.2 但是也要考虑出现极端的情况:如果在spring的容器里面,有多个对象满足这个参数的类型,咋办?
a. 搭配使用@Qualifier ,指定id值。
b. 投机取巧,把方法的参数名字,写成id的名字即可
*/
@Bean
public QueryRunner runner03(@Qualifier("dataSource") DataSource ds){
System.out.println("ds===" + ds);
return new QueryRunner(ds);
}
@Bean
public QueryRunner runner04(DataSource dataSource2){
System.out.println("dataSource2===" + dataSource2);
return new QueryRunner(dataSource2);
}
@Bean
public DataSource dataSource() throws PropertyVetoException {
ComboPooledDataSource ds = new ComboPooledDataSource();
ds.setDriverClass(driverClass);
ds.setJdbcUrl(jdbcUrl);
ds.setUser(user);
ds.setPassword(password);
return ds;
}
@Bean
public DataSource dataSource2() throws PropertyVetoException {
ComboPooledDataSource ds = new ComboPooledDataSource();
ds.setDriverClass(driverClass);
ds.setJdbcUrl(jdbcUrl);
ds.setUser(user);
ds.setPassword(password);
return ds;
}
}