那些网站可以做h5,北京seo网络优化招聘网,电商创业怎么做,网站建设前端切图文章目录 前言一、Configuration二、Import导入组件三、Conditional条件装配四、ImportResource导入Spring配置文件五、ConfigurationProperties配置绑定总结 前言
本文主要讲诉Configuration、Import、Conditional、ImportResource、ConfigurationProperties注解。
先将实体… 文章目录 前言一、Configuration二、Import导入组件三、Conditional条件装配四、ImportResource导入Spring配置文件五、ConfigurationProperties配置绑定总结 前言
本文主要讲诉Configuration、Import、Conditional、ImportResource、ConfigurationProperties注解。
先将实体类给大家方便下面测试 get、set、构造器大家自己添加这里我用的是ToString等注解以后会出文章讲诉所以没写这些就不列出来了。
public class Pet {private String name;}public class User {private String name;private Integer age;private Pet pet;
}public class Car {private String brand;private String price;
}一、Configuration 1、配置类里面使用Bean标注在方法上给容器注册组件默认也是单实例的所谓单实例跟我们在Spring中了解的bean创建对象的单实例是一样的就是在调用getBean方法创建相同类型实例对象时这些对象的地址相同即无论创建多少对象都是同一个对象。多实例就是每次创建对象都重新创建一个不同地址的新对象。 2、配置类本身也是组件。 3、proxyBeanMethods代理bean的方法。 Full模式(proxyBeanMethods true)保证每个Bean方法被调用多少次返回的组件都是单实例的默认 Lite模式(proxyBeanMethods false)每个Bean方法被调用多少次返回的组件都是新创建的 配置类
Configuration(proxyBeanMethods true) //告诉SpringBoot这是一个配置类 配置文件
public class MyConfig {/*** Full:外部无论对配置类中的这个组件注册方法调用多少次获取的都是之前注册容器中的单实例对象* return*/Bean //给容器中添加组件。以方法名作为组件的id。返回类型就是组件类型。返回的值就是组件在容器中的实例public User user01(){User zhangsan new User(zhangsan, 18,tomcatPet());//user组件依赖了Pet组件return zhangsan;}Bean(tom)public Pet tomcatPet(){return new Pet(tomcat);}
}SpingBoot启动类
SpringBootConfiguration
EnableAutoConfiguration
ComponentScan(com.dragon.boot)
public class MainApplication {public static void main(String[] args) {//1、返回我们IOC容器ConfigurableApplicationContext run SpringApplication.run(MainApplication.class, args);//2、查看容器里面的组件// String[] names run.getBeanDefinitionNames();// for (String name : names) {// System.out.println(name);// }//3、从容器中获取组件Pet tom01 run.getBean(tom, Pet.class);Pet tom02 run.getBean(tom, Pet.class);System.out.println(组件(tom01 tom02));//4、com.atguigu.boot.config.MyConfig$$EnhancerBySpringCGLIB$$51f1e1ca1654a892MyConfig bean run.getBean(MyConfig.class);System.out.println(bean);//如果Configuration(proxyBeanMethods true)代理对象调用方法。SpringBoot总会检查这个组件是否在容器中有。//保持组件单实例User user bean.user01();User user1 bean.user01();System.out.println(user user1);User user01 run.getBean(user01, User.class);Pet tom run.getBean(tom, Pet.class);System.out.println(用户的宠物(user01.getPet() tom));}
}看运行结果分析
组件true 配置类中我用的Full模式Configuration(proxyBeanMethods true) 当然就是单实例模式所有创建的对象都是同一个对象。com.dragon.boot.config.MyConfig$ $ SpringCGLIB$$0283e8358 这个输出是我getBean获取的配置类组件可以看出配置类本身也是组件。用户的宠物true 当我开启单实例模式时就能够处理依赖关系这里我创建的组件宠物用户组件里的宠物User zhangsan new User(zhangsan, 18,tomcatPet());。我创建的用户组件时就是调用的tomcatPet()因为是单实例模式所以我在创建用户调用创建的宠物和直接创建的宠物都是同一个对象。
启动类中我写了个查看容器里面的组件的方法注释掉了可以运行在控制台CtrlF搜索查看注册的组件。 将proxyBeanMethods 属性改成false运行结果就变成了false。
总结
配置 类组件之间无依赖关系用Lite模式加速容器启动过程减少判断配置 类组件之间有依赖关系方法会被调用得到之前单实例组件用Full模式默认
二、Import导入组件 Bean、Component、Controller、Service、Repository它们是Spring的基本标签在Spring Boot中并未改变它们原来的功能。 ComponentScan在Spring学习中大家一定接触了吧就是开启组件扫描。 Import({User.class、DBHelper.class})会给容器中自动创建出User、DBHelper组件默认组件的名字就是全类名。如果创建多个组件就在在大号内添加用逗号隔开。 Import({User.class,DBHelper.class})
Configuration(proxyBeanMethods false) //告诉SpringBoot这是一个配置类 配置文件
public class MyConfig {//....
}启动类
//1、返回我们IOC容器
ConfigurableApplicationContext run SpringApplication.run(MainApplication.class, args);//...//5、获取组件
String[] beanNamesForType run.getBeanNamesForType(User.class);for (String s : beanNamesForType) {System.out.println(s);
}三、Conditional条件装配 条件装配满足Conditional指定的条件则进行组件注入 这里用ConditionalOnMissingBean举例说明
ConditionalOnMissingBean(name “tt”) 用在类上没有tt名字的Bean时才会将类里所有配置注册成组件 用在方法上没有tt名字的Bean时才会将改方法注册成组件
Configuration(proxyBeanMethods true) //告诉SpringBoot这是一个配置类 配置文件
Import({User.class})
ConditionalOnMissingBean(name tom)
public class MyConfig {/*** Full:外部无论对配置类中的这个组件注册方法调用多少次获取的都是之前注册容器中的单实例对象* return*/Bean //给容器中添加组件。以方法名作为组件的id。返回类型就是组件类型。返回的值就是组件在容器中的实例public User user01(){User zhangsan new User(zhangsan, 18,tomcatPet());//user组件依赖了Pet组件return zhangsan;}Bean(tom)public Pet tomcatPet(){return new Pet(tomcat);}
}启动类
ConfigurableApplicationContext run SpringApplication.run(MainApplication.class, args);//2、查看容器里面的组件String[] names run.getBeanDefinitionNames();for (String name : names) {System.out.println(name);}boolean tom run.containsBean(tom);//是否包含某个组件System.out.println(容器中Tom组件tom);//falseboolean user01 run.containsBean(user01);System.out.println(容器中user01组件user01);//trueboolean tom22 run.containsBean(tom22);System.out.println(容器中tom22组件tom22);//true四、ImportResource导入Spring配置文件 公司项目使用bean.xml文件生成配置bean然而你为了省事想继续复用bean.xmlImportResource粉墨登场。 bean.xml
?xml version1.0 encodingUTF-8?
beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexmlns:contexthttp://www.springframework.org/schema/contextxsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsdbean idhaha classcom.dragon.boot.bean.Userproperty namename valuezhangsan/propertyproperty nameage value18/property/beanbean idhehe classcom.atguigu.boot.bean.Petproperty namename valuetomcat/property/bean
/beans复用方法
ImportResource(classpath:bean.xml)
public class MyConfig {//...
}启动类测试
//1、返回我们IOC容器ConfigurableApplicationContext run SpringApplication.run(MainApplication.class, args);boolean haha run.containsBean(haha);boolean hehe run.containsBean(hehe);System.out.println(hahahaha);//trueSystem.out.println(hehehehe);//true返回true说明注册成了组件。
五、ConfigurationProperties配置绑定 使用Java读取到properties文件中的内容并且把它封装到JavaBean中 传统方法
public class getProperties {public static void main(String[] args) throws FileNotFoundException, IOException {Properties pps new Properties();pps.load(new FileInputStream(a.properties));Enumeration enum1 pps.propertyNames();//得到配置文件的名字while(enum1.hasMoreElements()) {String strKey (String) enum1.nextElement();String strValue pps.getProperty(strKey);System.out.println(strKey strValue);//封装到JavaBean。}}}SpringBoot的两种方法
ConfigurationProperties Component 假设有配置文件application.properties
mycar.brandBYD
mycar.price100000只有在容器中的组件才会拥有SpringBoot提供的强大功能所以Bean对象类注册成组件 下面的prefix是指属性前缀
Component
ConfigurationProperties(prefix mycar)
public class Car {
...
}EnableConfigurationProperties ConfigurationProperties 1.开启Car配置绑定功能 2.把这个Car这个组件自动注册到容器中
配置类
EnableConfigurationProperties(Car.class)
public class MyConfig {//...
}Car类
ConfigurationProperties(prefix mycar)
public class Car {//...
}HelloController类
RestController
public class HelloController {AutowiredCar car;RequestMapping(/car)public Car car(){return car;}RequestMapping(/hello)public String handle01(){return HelloSpring Boot 2!你好;}
}这里我写了个控制层运行结果如下 可以看出确实将properties文件内的内容封装了。 总结
以上就是SpringBoot的一些底层注解的讲解。