springboot 第一天

1.javaconfig

1.1什么是javaconfig

以java代码的方式管理bean
出现在spring3.x-4.x之间

1.2为什么学javaconfig

springboot的原理基于spring中的javaconfig

1.3测试spring的几种方式

1.直接new
new:ClassPathXmlApplicationContext
2.注入

Runwith ContextConfigration

1.4 1.x xml 2.x

1.xml
bean id=“myDate” class=“java.util.Date”

2.注解

1.打注解:三大注解都是一个特殊Component
2.扫描注解:<context:component-scan base-package="cn.itsource._03iocanno_">

</context:component-scan>

1.5 javaconfig

1.基本用法
@Configration 代替了xml配置文件
@Bean 代替了
2.bean扫描(@ComponentScan/ComponentScans)

1.单包
@ComponentScan("cn.itsource._05componentScan")

2.多包
@ComponentScans(value = {
    @ComponentScan("cn.itsource._05componentScan.service"),
    @ComponentScan("cn.itsource._05componentScan.controller")
    })
3.排除或包含
@ComponentScans(value = {
    //这是哪些不要
    @ComponentScan(value = "cn.itsource._05componentScan",excludeFilters = {
            //排除加了Controller注解的Bean
            @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才生效
    )

})

3.bean的详情
1.@Scope

@Bean("mybean")//配置名称

2.@Lazy

 @Scope("prototype") //singleton单例(默认值) prototype多例

3.注入方式 4种
方式一:创建对象直接设置值,没有在spring中,不注入

OtherBean otherBean = new OtherBean();
    MyBean myBean = new MyBean();
    myBean.setOtherBean(otherBean);
    return myBean;

方式二:直接调方法

MyBean myBean = new MyBean();
    // 智能发现如果已经通过该方法注册了bean,直接注入就ok,不会再新创建一个了。
    myBean.setOtherBean(otherBean());
    return myBean;

方式三:对注入的bean 进行设置值

  MyBean myBean = new MyBean();
    myBean.setOtherBean(otherBean);
    return myBean;

方式四 通过构造函数进行注入 推荐使用

@Bean
public MyBean yyy(OtherBean otherBean){
    return new MyBean(otherBean);
}

4.condition 条件注册

public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
        //matches匹配  如果是true表示注册,否则不注册
        //获取类加载器
        ClassLoader classLoader = conditionContext.getClassLoader();
        //获取spring容器
        ConfigurableListableBeanFactory beanFactory = conditionContext.getBeanFactory();
        //获取bean定义注册器
        BeanDefinitionRegistry registry = conditionContext.getRegistry();
        //获取环境
        Environment environment = conditionContext.getEnvironment();
        String osName=environment.getProperty("os.name");
        System.out.println(osName);
        return osName.contains("Linux");
    }
//按照条件来注册bean,区分操作系统 windows linux
@Configuration
@Conditional(value = WindowsCondition.class)//提升为类级别
public class MainConfig {
    @Bean //windows
    public MyBean myBeanForWindows(){
        return new MyBean();
    }
    @Bean//Linux  继承父类的条件并且共存
    @Conditional(value = LinuxCondition.class)
    public MyBean myBeanForLinux(){
        return new MyBean();
    }
}

5.import

1.直接类(前面两个是直接类,后面的是selector和registrar)

@Import({
        One.class,Tow.class,MyImportSelector.class,MyImportBeanDefinitionRegistrar.class
})

2.selector

public class MyImportSelector implements ImportSelector {
    //你要注册类全限定名数组
    public String[] selectImports(AnnotationMetadata annotationMetadata) {
       //可以做逻辑处理
        return new String[]{"cn.itsource._08import.Tree"};
    }
}

3.Registar

public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
    public void registerBeanDefinitions(AnnotationMetadata annotationMetadata, BeanDefinitionRegistry beanDefinitionRegistry) {
        beanDefinitionRegistry.registerBeanDefinition("for",new RootBeanDefinition(For.class));
    }

6.factorybean

public class PersonFactoryBean implements FactoryBean<Person> {
    public Person getObject() throws Exception {
        return new Person();
    }

    public Class<?> getObjectType() {
        return Person.class;
    }

    public boolean isSingleton() {
        return true;
    }
}

public class MainConfig {
    //直接通过bean名称获取的是Factorybean所创建的对象而不是PersonFactoryBean
    //如果想要获取PersonFactoryBean,通过&name
    @Bean
    public PersonFactoryBean person(){
        return new PersonFactoryBean();
    }

2.springboot

1.配置文件导包

 <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>

2.任意类加上@SpringBootApplication

@SpringBootApplication//标识为一个springboot项目

3.启动应用

  //启动一个应用
        SpringApplication.run(类名.class,args);

4.添加打包插件

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

5.打包
在这里插入图片描述

6.运行
在当前项目目录下输入cmd,然后在控制面版输入
java -jar xxx.jar
7.注意:
要扫描的类必须在当前包或者子孙包中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值