javaConfig&springBoot入門


javaConfig&springBoot入門

1. javaConfig基礎

1.1 為什么要學習javaConfig

因為:Springboot原理基於它的!!!(為學習springBoot打下基礎)

1.2 Java bean 配置(JavaConfig)出現歷史

spring1.xxml配置

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);
    }
}
直接new

 

方式二:注入: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 {

}
ComponentScan掃描包

 

Bean詳情:

//給value給bean取名如果沒有設置默認就是方法名
@Bean(value = "myBean")
//singleton:單例  prototype:多例
@Scope(value = "singleton")
//懶加載(只對單例模式有用) 你用的時候才給你加載
@Lazy
bean詳情

 

@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"};
    }
}
importSelector選擇器

 

 

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));
    }
}
ImportBeanDefinitionRegistar注冊bean

 

@Import(value = {GreenColor.class, YellowColor.class, MyImportSelector.class, MyImportBeanDefinitionRegistrar.class})

 

      方式4FactoryBean的方式,返回的是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;
    }
}
factoryBean創建bean

 

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

  2Main函數啟動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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM