学习需要具备spring 5和spring mvc的基础
Springboot 2.0基础
1.@Configuration 和@Bean
springboot 中建议使用配置类(放在config包下的java文件)代替原来的beans.xml
/**
* 1.配置类里面使用@Bean标注在方法上给容器注册组件,默认也是单实例的
* 2.这个配置类本身也是一个组件
* 3.proxyBeanMethods:代理bean的方法
* Full(proxyBeanMethods = true) 每次外接调用都会检查容器中有没有,比如下面这种依赖的情况需要用到
* Lite(proxyBeanMethods = false) 速度更快,如果不依赖组件推荐这个
*
*/
//@Configuration //告诉SpringBoot这是一个配置类 == 配置文件,
//@Configuration(proxyBeanMethods = true) //每次外接调用都会检查容器中有没有,比如下面这种组件之间互相依赖的情况需要用到
@Configuration(proxyBeanMethods = false) //速度更快,如果不依组件之间不互相依赖用这个。
public class MyConfig {
/**
* 默认是单例模式的
* 外部无论对配置类中的这个组件注册方法调用多少次获取的都是之前注册容器中的单实例对象
*
*/
@Bean //给容器添加组件,方法名作为组件的id,返回类型就是组件类型。返回的值就是组件在容器中的实例
public User user01(){
User uu = new User("Bean的方法,user01", "tttttt");
//uu.setPet(loverPet()); //组件之间互相依赖 需要@Configuration(proxyBeanMethods = true)
return uu;
}
@Bean("lover") //不想让组件名就是方法名,可以在这个注解里面指定名字
public Pet loverPet(){
return new Pet("loverPet");
}
}
2.@service + @Controller + @Autowired + @GetMapping +@ResponseBody
这些基本上跟原来spring一样没什么可说的
@Controller
public class MyController {
@Autowired
private UserServiceImpl userService;
@GetMapping("/test01")
@ResponseBody
public String TestAutoWired(){
User user = userService.getUser();
return user.toString();
}
}
3.@Import 将类注册到Spring组件
@Import({User.class, DBHelper.class})
注意:
1.这个就是把一个类注册到了spring,跟在类上面加@Component是一样的,不是导入命名空间
2.加在@Configuration 控制类上,可以生效。
下面案例在一个config中,用两种方法将User导入,并从mian方法中检验
@Import(User.class)
@Configuration
public class MyConfig {
@Bean
public User user01(){
User uu = new User("Bean的方法,user01", "tttttt");
return uu;
}
}
@SpringBootApplication
public class SpringbootconfigApplication {
public static void main(String[] args) {
ConfigurableApplicationContext run = SpringApplication.run(SpringbootconfigApplication.class, args);
System.out.println("检查通过import 导入的user组件是否成功");
//获取所有类型为User的Bean组件
String[] beanNamesForType = run.getBeanNamesForType(User.class);
//遍历输出
for (int i = 0; i < beanNamesForType.length; i++) {
System.out.println(beanNamesForType[i]);
}
}
}
4.@Conditional
按条件装配:满足Conditional指定的条件,则进行组件注入,有很多派生的子注解,可以放在类和方法上
Conditional还有很多分支,需要的时候再去研究吧。
//当bean里面存在name=lover的时候生效,注意,现在这种情况不生效的原因是Bean("lover")在User01的下面了。
@ConditionalOnBean(name = "lover")
@Bean
public User user01(){
User uu = new User("Bean的方法,user01", "tttttt");
//uu.setPet(loverPet()); //组件之间互相依赖 需要@Configuration(proxyBeanMethods = true)
return uu;
}
@Bean("lover") //不想让组件名就是方法名,可以在这个注解里面指定名字
public Pet loverPet(){
return new Pet("loverPet");
}
5.@ImportResource
以前很多都是用的bean.xml方式,如何让老办法也能生效呢
@ImportResource("classpath:beans.xml")//让老得beans方法生效
6.@ConfigurationProperties
这个注解可以让被注解的类读取到application.properties里的赋值,
在springboot底层中,大量使用了这种方法对属性进行操作
例如 application.properties
mycar.name=bwm3
mycar.age=3
pojo.Car.java
@Component
@ConfigurationProperties(prefix = "mycar")
public class Car {
private String name;
private Integer age;
...
test
Car bean = run.getBean(Car.class);
System.out.println(bean.toString());