javaConfig&springBoot入門
1. javaConfig基礎
1.1 為什么要學習javaConfig
因為:Springboot原理基於它的!!!(為學習springBoot打下基礎)
1.2 Java 的 bean 配置(JavaConfig)出現歷史
spring1.x:xml配置
spring2.x:注解配置(打注解,掃描注解)
spring3.x-4.x javaconfig&springboot
Spring5.x
2. JavaConfig操作
2.1 spring測試方式
方式一:new ClassPathXmlApplicationContext

/** * 方式一:直接new * @throws Exception */ @Test public void test1() throws Exception { ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext-xml.xml"); String[] beanDefinitionNames = context.getBeanDefinitionNames(); for (String beanDefinitionName : beanDefinitionNames) { System.out.println(beanDefinitionName); } }
方式二:注入:Runwith ContextConfigration

/** * 方式二:注解方式 springtest注入 * @author Lenovo */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:applicationContext-xml.xml") public class SpringTestTest { @Autowired private ApplicationContext applicationContext; @Test public void test2() throws Exception { for (String beanDefinitionName : applicationContext.getBeanDefinitionNames()) { System.out.println(beanDefinitionName); } } }
2.2 xml配置
<bean id="myDate" class="java.util.Date">
2.3 注解配置
1. 打注解
2. 掃描包
<context:component-scan base-package=”包的全限定名”/>
2.4 javaconfig配置
基本:
配置類:@Configration 代替了xml配置文件
@Bean 代替了<bean>

/** * @Configuration 加上此注解就相當於一個spring配置文件(applicationContext.xml) * @author Lenovo */ @Configuration public class IocConfig { /** * @Bean 就相當於創建了一個bean * 等同於 <bean id="myBean" class="....MyBean"/> * @return */ @Bean public MyBean myBean() { return new MyBean(); } }
掃描包:
bean掃描(@ComponentScan/ComponentScans)

/** * 注解方式配置bean * 1.打注解 * 2.掃描包 * * @author Lenovo */ @Configuration /**掃描父類包 @ComponentScan("cn.itsource._05componentScan") */ /**掃描多個包的方式 @ComponentScans(value = { @ComponentScan("cn.itsource._05componentScan.controller"), @ComponentScan("cn.itsource._05componentScan.service") })*/ //排除指定注解或者包含指定注解的bean @ComponentScans(value = { /*@ComponentScan(value = "cn.itsource._05componentScan", excludeFilters = { //排除指定的注解 @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = {Controller.class}) })*/ //包含指定的注解 @ComponentScan(value = "cn.itsource._05componentScan", includeFilters = { @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = {Service.class}) }, useDefaultFilters = false )//關閉默認全部掃描includeFilters才生效) }) public class IocConfig { }
Bean詳情:

//給value給bean取名如果沒有設置默認就是方法名 @Bean(value = "myBean") //singleton:單例 prototype:多例 @Scope(value = "singleton") //懶加載(只對單例模式有用) 你用的時候才給你加載 @Lazy
@Condition按條件注入:
1.條件類創建(實現Condition接口)
/** * windows操作系統才能獲取bean * @author Lenovo */ public class WindowsCondition implements Condition { @Override public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) { //獲取類加載器 ClassLoader classLoader = conditionContext.getClassLoader(); //獲取spring容器 ConfigurableListableBeanFactory beanFactory = conditionContext.getBeanFactory(); //獲取注冊器 BeanDefinitionRegistry registry = conditionContext.getRegistry(); //獲取本機環境 Environment environment = conditionContext.getEnvironment(); String osName = environment.getProperty("os.name"); System.out.println("Windows:" + osName); return osName.contains("Windows"); } }
2.@Condition添加到類或者方法上面
@Bean @Conditional(value = WindowsCondition.class) public MyBean myBeanWindows() { return new MyBean(); }
@Import導入bean:
創建bean的方式
方式1:@ComponentScan+注解(@Controller+@Service+@Repository+@Compont)-自己創建的bean
方式2:@Bean 別人的bean
方式3:@Import(快速向容器中注冊一個bean)
1)@Import(要導入的組件),名稱就是累的全限定名
2)ImportSelector:導入選擇器,返回需要導入組件類的全限定名數組-springboot底層用的多

/** * 選擇器, * @author Lenovo */ public class MyImportSelector implements ImportSelector { /** * 你要注冊類全限定名數組 * @param annotationMetadata * @return */ @Override public String[] selectImports(AnnotationMetadata annotationMetadata) { //可以做邏輯判斷 return new String[]{"cn.itsource._08import_.PurpleColor", "cn.itsource._08import_.GrayColor"}; } }
3)ImportBeanDefinitionRegistrar:通過bean定義注冊器手動項目spring中容器中注冊

/** * 通過bean定義注冊器手動項目spring中容器中注冊 * @author Lenovo */ public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar { @Override public void registerBeanDefinitions(AnnotationMetadata annotationMetadata, BeanDefinitionRegistry beanDefinitionRegistry) { beanDefinitionRegistry.registerBeanDefinition("redColor", new RootBeanDefinition(RedColor.class)); } }
@Import(value = {GreenColor.class, YellowColor.class, MyImportSelector.class, MyImportBeanDefinitionRegistrar.class})
方式4:FactoryBean的方式,返回的是getObject的類實例-和其他框架集成是用的多

public class PersonFactoryBean implements FactoryBean<Person> { @Override public Person getObject() throws Exception { return new Person(); } @Override public Class<?> getObjectType() { return Person.class; } @Override public boolean isSingleton() { return true; } }
3. springBoot入門
3.1 步驟
一 創建項目
parent
dependency
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.5.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
二 創建springboot項目並且啟動
1)任意類加上@SpringBootApplication
2)Main函數啟動springboot的應用
@SpringBootApplication public class App { public static void main(String[] args) { SpringApplication.run(App.class, args); } }
三 寫一個Contorller來測試
HelloConroller
@Controller public class HelloController { @RequestMapping("/hello") @ResponseBody public String hello() { return "hello springBoot!"; } }
四 訪問頁面
3.2 打包
1.導入插件
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <mainClass>配置類全限定名</mainClass> </configuration> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
2.打包
3. 運行
窗口運行:java -jar xxx.jar
后台運行: nohup java -jar XXX.jar & 只linux