ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

01 SpringBoot2.0学习-基础

2021-12-27 13:35:36  阅读:178  来源: 互联网

标签:01 SpringBoot2.0 class 学习 Bean User 组件 Configuration public


image-20211224151241269
学习需要具备spring 5和spring mvc的基础

Springboot 2.0基础

1.@Configuration 和@Bean

springboot 中建议使用配置类(放在config包下的java文件)代替原来的beans.xml

/**
 * 1.配置类里面使用@Bean标注在方法上给容器注册组件,默认也是单实例的
 * 2.这个配置类本身也是一个组件
 * 3.proxyBeanMethods:代理bean的方法
 *      Full(proxyBeanMethods = true) 每次外接调用都会检查容器中有没有,比如下面这种依赖的情况需要用到
 *      Lite(proxyBeanMethods = false) 速度更快,如果不依赖组件推荐这个
 *
 */
//@Configuration //告诉SpringBoot这是一个配置类 == 配置文件,
//@Configuration(proxyBeanMethods = true)  //每次外接调用都会检查容器中有没有,比如下面这种组件之间互相依赖的情况需要用到
@Configuration(proxyBeanMethods = false)  //速度更快,如果不依组件之间不互相依赖用这个。
public class MyConfig {


    /**
     * 默认是单例模式的
     * 外部无论对配置类中的这个组件注册方法调用多少次获取的都是之前注册容器中的单实例对象
     *
     */
    @Bean  //给容器添加组件,方法名作为组件的id,返回类型就是组件类型。返回的值就是组件在容器中的实例
    public User user01(){
        User uu = new User("Bean的方法,user01", "tttttt");
        //uu.setPet(loverPet());  //组件之间互相依赖 需要@Configuration(proxyBeanMethods = true)
        return uu;
    }

    @Bean("lover") //不想让组件名就是方法名,可以在这个注解里面指定名字
    public Pet loverPet(){
        return new Pet("loverPet");
    }
}

2.@service + @Controller + @Autowired + @GetMapping +@ResponseBody

这些基本上跟原来spring一样没什么可说的

@Controller
public class MyController {

    @Autowired
    private UserServiceImpl userService;

    @GetMapping("/test01")
    @ResponseBody
    public String TestAutoWired(){
        User user = userService.getUser();
        return user.toString();
    }
}

3.@Import 将类注册到Spring组件

@Import({User.class, DBHelper.class})

注意:

1.这个就是把一个类注册到了spring,跟在类上面加@Component是一样的,不是导入命名空间

2.加在@Configuration 控制类上,可以生效。

下面案例在一个config中,用两种方法将User导入,并从mian方法中检验

@Import(User.class)  
@Configuration 
public class MyConfig {


    @Bean
    public User user01(){
        User uu = new User("Bean的方法,user01", "tttttt");
        return uu;
    }

}

@SpringBootApplication
public class SpringbootconfigApplication {


    public static void main(String[] args) {
        ConfigurableApplicationContext run = SpringApplication.run(SpringbootconfigApplication.class, args);

        System.out.println("检查通过import 导入的user组件是否成功");
        
        //获取所有类型为User的Bean组件
        String[] beanNamesForType = run.getBeanNamesForType(User.class);
      //遍历输出
        for (int i = 0; i < beanNamesForType.length; i++) {
            System.out.println(beanNamesForType[i]);
        }

    }

}

4.@Conditional

按条件装配:满足Conditional指定的条件,则进行组件注入,有很多派生的子注解,可以放在类和方法上

Conditional还有很多分支,需要的时候再去研究吧。

  //当bean里面存在name=lover的时候生效,注意,现在这种情况不生效的原因是Bean("lover")在User01的下面了。
    @ConditionalOnBean(name = "lover")
    @Bean
    public User user01(){
        User uu = new User("Bean的方法,user01", "tttttt");
        //uu.setPet(loverPet());  //组件之间互相依赖 需要@Configuration(proxyBeanMethods = true)
        return uu;
    }
    @Bean("lover") //不想让组件名就是方法名,可以在这个注解里面指定名字
    public Pet loverPet(){
        return new Pet("loverPet");
    }

5.@ImportResource

以前很多都是用的bean.xml方式,如何让老办法也能生效呢

@ImportResource("classpath:beans.xml")//让老得beans方法生效

6.@ConfigurationProperties

这个注解可以让被注解的类读取到application.properties里的赋值,

在springboot底层中,大量使用了这种方法对属性进行操作

例如 application.properties

mycar.name=bwm3
mycar.age=3

pojo.Car.java

@Component
@ConfigurationProperties(prefix = "mycar")
public class Car {
    private String name;
    private Integer age;
...

test

        Car bean = run.getBean(Car.class);
        System.out.println(bean.toString());

标签:01,SpringBoot2.0,class,学习,Bean,User,组件,Configuration,public
来源: https://blog.csdn.net/BowenXu11/article/details/122169951

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有