Spring笔记
Spring 入门篇
在 Spring 中,将 Bean 注入容器中的三种方式:通过 XML配置、Java配置、自动扫描配置。
1. 基本属性注入方法
一般有三种:通过构造器注入、通过getter/setter方法注入、通过p名称空间注入。
2. Bean 获取方法
一般建议使用 id 或者 name 去获取 Bean 的实例。
3. Java 配置
将 Bean 注入到 Spring 容器中,有三种方法:xml
注入、java
配置、自动扫描。
// Bean
public class Hello() {
public String sayHello() {
return "hello java";
}
}
// configure
@Configuration
public class JavaConfig() {
@Bean("h1")
Hello he(){
return new Hello();
}
}
// Test
public class Test(String[] arges) {
AnnotationConfigApplicationContext ctx = ew AnnotationConfigApplicationContext(JavaConfig.class);
Hello bean = ctx.getBean("h1",Hello.class);
System.out.println(bean);
}
Bean 的名字默认是首字母小写的类名。
4. 自动化配置
4.1 java 配置自动扫描
// Service
@Service
public class User() {
private String name;
private int age;
// getter/setter methods and constructor
}
// javaConfigure
@Configuration
@ComponentScan
public class Javaconfig() {
@Bean
User user(){
return new User("xxx",13);
}
}
// Test
public class Test(String[] arges) {
AnnotationConfigApplicationContext ctx = ew AnnotationConfigApplicationContext(JavaConfig.class);
User bean = ctx.getBean(User.class);
System.out.println(bean);
}
扫描方式有两种:通过包的位置扫、都过注解扫。
通过包的位置扫时,如果不添加包名,就是配置类所在的包下的 Bean 以及配置类所在包下的子包下的类。
4.2 对象注入
有三种方式:@Autowried、@Resource、@Injected。
@Autowried 根据类型去查找,一般要求这个类型只有一个对象。(即一个类只有一个实例)。
@Resource 一个类对应多个实例。
5、条件注解的使用-多环境切换
条件注解:@Bean 需要设置相同的 id,这样在配置时才会自动匹配,然后给每个 Bean 加上条件注解。
多环境切换:在加载配置类时,要先设置当前环境,然后在加载配置类,加载完成后需要刷新容器。
多环境切换的注解:@Profile,它的源码注解也是条件注解(@Conditional)
// Bean
@Component
public class DataSource() {
private String url;
private String name;
// getter/setter methods and toString()
}
// javaConfigure
@Configuration
@ComponentScan
public class Javaconfig() {
@Bean("ds")
@Profile("dev")
DataSource dataSource(){
DataSource data = new DataSource();
data.setUrl("www.qqq.com");
data.setName("qqq");
return new data;
}
@Bean("ds")
@Profile("prod")
DataSource dataSource(){
DataSource data = new DataSource();
data.setUrl("www.sss.com");
data.setName("sss");
return new data;
}
}
// Test
public class Test(String[] arges) {
AnnotationConfigApplicationContext ctx = ew AnnotationConfigApplicationContext();
ctx.getEnvironment().setActiveProfiles("prod");
ctx.register(Javaconfig.class);
ctx.refresh();
User bean = ctx.getBean(DataSource.class);
System.out.println(bean);
}
6、混合配置
一般在整合第三方服务时使用(xml 配置 + java 配置)。在进行配置时,需要在 java 配置中使用 @ImportResource 来导入 xml 配置。
// application.xml 文件
...具体配置文件...
// java configure
@Configration
@ImportResource("classpath:application.xml")
public class javaConfig(){
....具体设置....
}
7、Aop
8、事务
事务是一组不可分割的操作集合,要么都操作,要么都不操作,常用来确保数据的一致性。
java 事务配置
需要在 xml 文件中,添加:< tx: annotation-driven transaction-manager="transactionManager" />
,在需要添加事务的方法上使用 @Transaction。
@Service
public class UserService() {
@Autowired
UserDao userDao;
@Transaction
public void updata(){
userDao.addMoney("xxx",200);
int i = 1 / 0;
userDao.minMoney("yyy",200);
}
}
@Transaction 放在类上,表示该类中的方法都开启事务。