栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Springboot常用注解

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Springboot常用注解

SpringBoot常用注解及原理介绍
  • 1.@Configuration注解
  • 2.@Import
  • 3.@Conditional
  • 4.@ImportResource
  • 5.@ConfigurationProperties
  • 6.@PathVariable、@RequertParams 常用参数注解
  • 7.@Autowired、@Qualifier 与@Resource

1.@Configuration注解

@Configuration修饰的类,表示这是一个配置类 == 配置文件。
有两种模式:

  • Full:@Configuration(proxyBeanMethods = false),保证每个@Bean方法无论被条用多少次返回的组件都是单实例的,为默认模式。
  • Lite:@Configuration(proxyBeanMethods = true),每次@Bean方法被调用时返回的组件都是新创建的

应用场景

  • 配置类之间无依赖关系,使用Lite模式,可以加速容器启动过程,减少判断。
  • 配置类之间有依赖关系,使用Full模式,默认。

示例:

@Configuration(proxyBeanMethods = false) //告诉SpringBoot这是一个配置类 == 配置文件
public class MyConfig {

    
    @Bean //给容器中添加组件。以方法名作为组件的id。返回类型就是组件类型。返回的值,就是组件在容器中的实例
    public User user01(){
        User zhangsan = new User("zhangsan", 18);
        //user组件依赖了Pet组件
        zhangsan.setPet(tomcatPet());
        return zhangsan;
    }

    @Bean("tom")
    public Pet tomcatPet(){
        return new Pet("tomcat");
    }
}


@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan("com.atguigu.boot")
public class MainApplication {

    public static void main(String[] args) {
    //1、返回我们IOC容器
        ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args);

    //2、查看容器里面的组件
        String[] names = run.getBeanDefinitionNames();
        for (String name : names) {
            System.out.println(name);
        }

    //3、从容器中获取组件
        Pet tom01 = run.getBean("tom", Pet.class);
        Pet tom02 = run.getBean("tom", Pet.class);
        System.out.println("组件:"+(tom01 == tom02));

    //4、com.atguigu.boot.config.MyConfig$$EnhancerBySpringCGLIB$$51f1e1ca@1654a892
        MyConfig bean = run.getBean(MyConfig.class);
        System.out.println(bean);

    //如果@Configuration(proxyBeanMethods = true)代理对象调用方法。SpringBoot总会检查这个组件是否在容器中有。
        //保持组件单实例
        User user = bean.user01();
        User user1 = bean.user01();
        System.out.println(user == user1);

        User user01 = run.getBean("user01", User.class);
        Pet tom = run.getBean("tom", Pet.class);

        System.out.println("用户的宠物:"+(user01.getPet() == tom));
    }
}
2.@Import

@Import给容器中自动创建出导入的组件,默认组件的名字就是全类名

@Import({User.class, DBHelper.class})
@Configuration(proxyBeanMethods = false) //告诉SpringBoot这是一个配置类 == 配置文件
public class MyConfig {
}
3.@Conditional

条件装配:满足Conditional指定的条件,则进行组件注入。
条件如下

@Configuration(proxyBeanMethods = false)
@ConditionalOnMissingBean(name = "tom")//没有tom名字的Bean时,MyConfig类的Bean才能生效。
public class MyConfig {

    @Bean
    public User user01(){
        User zhangsan = new User("zhangsan", 18);
        zhangsan.setPet(tomcatPet());
        return zhangsan;
    }

    @Bean("tom22")
    public Pet tomcatPet(){
        return new Pet("tomcat");
    }
}
4.@ImportResource

老项目中使用了bean.xml生成配置文件,需要用在新项目中,可以使用@ImportResource导入




    
        
        
    

    
        
    

————————————————
//使用@ImportResource("classpath:beans.xml")后就可以直接将xml中的bean放入spring容器中了
@ImportResource("classpath:beans.xml")
public class MyConfig {
...
}
5.@ConfigurationProperties

使用@ConfigurationProperties读取properties配置文件中的内容,并封装到bean中

  • 方法一:@ConfigurationProperties + @Component
application.properties文件:
mycar.brand=BYD
mycar.price=100000

//配置类,使用使用@Component将car注册到容器中
@Component
@ConfigurationProperties(prefix = "mycar")
public class Car {
	private String brand;
	private Integer price;
}
  • 方法二:@EnableConfigurationProperies + @ConfigurationProperties
@ConfigurationProperties(prefix = "mycar")
public class Car {
...
}

//1.开启car属性自动绑定功能
//2.将car组件注册到容器里
@EnableConfigurationProperties(Car.class)
public class MyConfig {
...
}
6.@PathVariable、@RequertParams 常用参数注解
  • @PathVariable 路径变量
    //car/2/owner/zhangsan
    @GetMapping("/car/{id}/owner/{username}")
    public Map getCar(@PathVariable("id") Integer id,
                    @PathVariable("username") String username)
  • @RequertParams 获取请求参数(指问号后的参数)
//car/2/owner/zhangsan
    @GetMapping("/id?id=12")
    public Map getCar(@PathVariable("id") Integer id)
  • @RequestHeader 获取请求头
  • @CookieValue 获取Cookie
  • @RequestAttribute 获取request域属性
  • @RequestBody 获取请求体 post
  • @MatrixVariable 矩阵变量
  • @ModelAttribute
7.@Autowired、@Qualifier 与@Resource
  • @Autowired根据类型注入
//根据UserDao类型注入
@Autowired
private UserDao userDao;
  • @Qualifier根据名称注入,一般与@Autowired一起使用
//当UserDao接口有两个实现类时, IOC容器会针对同一个UserDao类型会有多个Bean实例,此时用Autowired无法知道具体注入哪一个Bean,此时需要配合@Qualifier使用
@Service
public class UserDaoImpl1 implements UserDao{
}

@Service
public class UserDaoImpl2 implements UserDao{
}

//@Qualifier告诉spring注入哪一个名称的bean
@Autowired
@Qualifier(name = "userDaoImpl1")
private UserDao userDao;
  • @Resource既可以根据类型注入也可以根据名称注入
//根据类型注入
@Resource
private UserDao userDao;

//根据名称注入
@Resource(name = "userDaoImpl1")
private UserDao userDao;

@Autowired和@Qualifier由spring提供,@Resource由J2EE提供

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1007345.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号