SpringBootDay1

javaconfig

为什么要了解javaconfig?

springboot就是基于javaconfig.

什么是javaconfig

以java代码的方式管理bean

装逼时刻(spring历史)

spring1.x版本的时候,我们都是通过xml来配置比如在
applicationcontext.xml

<bean id="date" class="java.util.Date"></bean>

spring2.x版本的时候,添加了注解比如 @controller @service @Reponsitory @Component @Autowired

spring3.x-spring4.x 版本的时候 就有了 @Configuration 和 @Bean @Configuration 作用于类上,相当于一个xml配置文件;
@Bean 作用于方法上,相当于xml配置中的;
至此注解慢慢的取代了xml配置。

javaconfig操作

大家可以通过spring的测试来区别每个版本之间的具体区别
applicationcontext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="date" class="java.util.Date"></bean>
  
</beans>

spring1.x的操作
springtest方式一: new ClassPathXmlApplicationContext

public class Maintest {
    @Test
    public void test(){
        ApplicationContext context =
                new ClassPathXmlApplicationContext("applicationContext.xml");
        String[] beanDefinitionNames = context.getBeanDefinitionNames();
        for (String beanDefinitionName : beanDefinitionNames) {
            System.out.println(beanDefinitionName);
        }
    }
}    

springtest方式二: 注入 Runwith ContextConfigration

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationcontext-xml.xml")
public class Maintest {
    @Autowired
    private ApplicationContext applicationContext;
    @Test
    public void test2(){
        String[] beanDefinitionNames = applicationContext.getBeanDefinitionNames();
        for (String beanDefinitionName : beanDefinitionNames) {
            System.out.println(beanDefinitionName);
        }
    }
}

两种方法打印结果一致

spring2.x的操作与1.x的测试操作一致,但xml不一致,多了扫描组件,少了bean的手写,只需要在你要依赖注入的类上加注解,controller层@controller ,service层service,dao层@Component,

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                            http://www.springframework.org/schema/context  http://www.springframework.org/schema/context/spring-context.xsd">
    <context:component-scan base-package="cn.itsource._03iocanno_(你加入注解的包层)"></context:component-scan>
</beans>

spring3.x–spring4.x的操作完全不一样了,没有了xml

@Configuration
public class JavaConfig {

    @Bean
    public One one(){
        return new One();
    }

}

@Configration 代替了xml配置文件
@Bean 代替了

springtest变成了

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = JavaConfig.class)
public class Maintest {
    @Autowired
    private ApplicationContext applicationContext;
    @Test
    public void test(){
    //方式一
        ApplicationContext context =new AnnotationConfigApplicationContext(JavaConfig.class);

        String[] beanDefinitionNames = context.getBeanDefinitionNames();
        for (String beanDefinitionName : beanDefinitionNames) {
            System.out.println(beanDefinitionName);
        }
    }
    @Test
    public void test2(){
        String[] beanDefinitionNames = applicationContext.getBeanDefinitionNames();
        for (String beanDefinitionName : beanDefinitionNames) {
            System.out.println(beanDefinitionName);
        }
    }
}

我们原来使用spring的时候不会在xml中一个一个配置bean,我们就在类上加上@Repository,@Service,@Controller @Component,并且注入时可以使用@AutoWired的注解注入。 现在这些都被包含在<context:component-scan base-package=“cn.itsource”/>.,它将扫描cn.itsource下面的所有spring注解;扫描多个的时候

@Configuration
//@ComponentScan("cn.itsource._05componentScan_")
//配置多个包
/*方式一
@ComponentScan("cn.itsource._05componentScan_.controller")
@ComponentScan("cn.itsource._05componentScan_.service")*/
/*方式二
@ComponentScans(value={@ComponentScan("cn.itsource._05componentScan_.controller"),
        @ComponentScan("cn.itsource._05componentScan_.service") })*/
@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)
})

Bean详情-@Scope 组件范围&@Lazy 懒加载-认识
在这里插入图片描述
@Conditional-按照条件注册

@Conditional(value = LinuxCondition.class) //放到类上面下面所有方法都生效,但是如果方法上加了优先级更高
public class MainConfig1 {

    //相当于在xml中配置了<bean id="" class="cn.itsource.dao.UserDao"><bean/>
    @Bean("userDao") //指定bean的名字
    //@Scope(value = "protoType") //默认值为为单实例,默认值为是创建容器时就创建对象
    @Lazy //只对单实例有用,表示创建容器时不创建对象,只有第一次使用时创建对象
    public UserDao userDao01(){
        return new UserDao();
    }

    @Bean
    public UserDao userDaoLinux(){
        return new UserDao();
    }
    //可以加到方法上面,也可以加到类上面. 根据当前os.name的环境来判断
    @Bean
    @Conditional(value = WindowsCondition.class)
    public UserDao userDaoWindows(){
        return new UserDao();
    }
}

WindowsCondition.java

public class WindowsCondition 
        implements Condition {
    /**
     *
     * @param context conditionContext条件上下文,可以获取一些信息,来判断是否条件
     * @param annotatedTypeMetadata 当前方法或注解类的注解类型元数据信息
     * @return
     */
    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata annotatedTypeMetadata) {

        //常用方法
        //1 获取beanFactory
        ConfigurableListableBeanFactory beanFactory = context.getBeanFactory();
        //2 获取类家长群
        ClassLoader classLoader = context.getClassLoader();
        //3 获取当前运行环境
        Environment environment = context.getEnvironment();
        //4 获取bean的注册器,获取手动注册bean到spring容器
        BeanDefinitionRegistry registry = context.getRegistry();
        String osName = environment.getProperty("os.name");
      

        return osName .contains("Windows");
    }
}

LinuxCondition.java

public class LinuxCondition implements Condition {
    @Override
    public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
        //获取类加载器
        ClassLoader classLoader = conditionContext.getClassLoader();
        //获取spring容器
        ConfigurableListableBeanFactory beanFactory = conditionContext.getBeanFactory();
        //获取bean定义注册器
        BeanDefinitionRegistry registry = conditionContext.getRegistry();
        //获取环境
        Environment environment = conditionContext.getEnvironment();
        String property = environment.getProperty("os.name");
        return property.contains("Linux");
    }
}

@Import

@Configuration
@Import({GreenColor.class(类的权限类名),MySelect.class(导入选择器),MyRegistrar.class(bean定义注册器手动项目spring中容器中注册)})
public class JavaConfig {
    @Bean
     public PersonFactory person(){
       return new PersonFactory();
    }
}
public class PersonFactory implements FactoryBean<Person> {
    @Override
    public Person getObject() throws Exception {
        return new Person();
    }

    @Override
    public Class<?> getObjectType() {
        return null;
    }

    @Override
    public boolean isSingleton() {
        return false;
    }
}

springboot

一 创建项目
parent

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.5.RELEASE</version>
  </parent>

dependency

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

二 创建springboot项目并且启动
1)任意类加上@SpringBootApplication
2)Main函数启动springboot的应用

@SpringBootApplication
public class App {
    public static void main(String[] args) {
        SpringApplication.run(App.class,args);
    }
}

三 写一个Contorller来测试

@RestController
public class Mycontroller {
    @RequestMapping("/hello")
    public String hello(){
        return "hello world";
    }
}

运行app就可以在localhost:8080/hello上访问成功springboot项目了

打包

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

在这里插入图片描述
在target目录下查看jar
在jar当前路径打开cmd运行java -jar xxx.jar 就哦里给了

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值