问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

springboot注解注入bean(springbootapplication注解)

发布网友 发布时间:2024-09-07 01:52

我来回答

1个回答

热心网友 时间:2024-12-02 16:17

springboot开发中将bean放入容器你知道的有几种方式?

spring已然成为了java开发中的事实标准。

那么springboot开发中,你知道的几种bean置入容器中的方式呢?下面让我们一起来探索:

1、[@Configuration+@Bean]

@Configuration用来声明一个配置类,然后使用@Bean注解,用于声明一个bean,将其加入到Spring容器中。

2、@Import注解导入

该注解用的可能不是很多,但是非常重要,进行spring扩展的时候经常用到。经常搭配自定义注解使用,然后王容器中注入一个配置文件。

使用:

这里就可以直接使用了,而且已经实例化过的。

其他的方式@Service@Component...

就不说了

SpringBoot注解介绍

1、@ComponentScan:

新建SpringBoot项目时会自动生成一个入口类命名规则是项目名+Application该类上面有个@SpringBootApplication项目启动时系统会自动扫描这个类的同级以及下级目录将需要的对象注入到IOC容器在需要时通过DI(依赖注入)注入到需要的对象中那么问题来了程序是怎么确定需要扫描哪些包呢这是因为在@SpringBootApplication中有个注解如图:

通过该注解上的配置才能准确定位需要扫描哪些包。

由此我们可以进行延伸如果我们需要臊面的资源不再该类的同级或者下级我们只需要在项目入口类上配置上@ComponentScan("资源路径")

就可以将我们需要的外部(其他路径)资源加载到IOC容器中了

2、@Qualifier("byname")通过name名注入

3、@Primary对于同一个类型下有多个实现该注解可以标明哪个实现类是优先被注入的如图:

此时会优先注入带有@Primary注解的bean如下图:

4、@ConditionalOnProperty该注解可以读取配置文件根据配置文件的值来决定是否将bean注入到容器中

??该注解中的三个参数:value值为配置文件中配置项的名字?havingValue为值??matchIfMissing的值为true和false时针对没有配置项的情况下时是否注入

5、

@Getterlombok为实体类自动生成getter方法

@Setter?lombok为实体类自动生成setter方法

@AllArgsConstructor??lombok为实体类自动生成全参数构造方法

@NoArgsConstructor??lombok为实体类自动生成无参数构造方法

@RequiredArgsConstructor?lombok为实体类自动生成成员变量非空的参数构造方法

@NonNulllombok为实体类指定参数非空

实体类.builder().name("muse").age(18).build()可以替换之前的setter方法赋值不过需要在实体类上增加@Builder注解

但是一旦使用@Builder就无法通过构造方法去实例化bean因为@Builder会生成一个私有的构造方法如果想使用构造方法实例化可以配合使用NoArgsConstructor?或者手动新增一个无参构造

SpringBootFilter中注入Bean

由于web应用启动的顺序顺序的原因(listener-filter-servlet),在Filter中注入Bean是不会成功的。

网上由很多的实现方式来实现在Filter中注入Bean,这里,我换一种方式,给Filter添加一个构造方法,在初始化Filter的时候把Bean实例传入,这里以Shiro中的拦截remmeberMe的Filter为例:

然后,在Shiro的配置文件中初始化AddPrincipalToSessionFilter:

最后帮朋友打个小广告

一个有趣的迷你小程序

springboot启动排除某些bean的注入

问题:

最近做项目的时候,需要引入其他的jar。然后还需要扫描这些jar里的某些bean。于是使用注解:@ComponentScan

这个注解直接指定包名就可以,它会去扫描这个包下所有的class,然后判断是否解析:

@ComponentScan(basePackages={"your.pkg","other.pkg"})

publicclassApplication{

}

其他的jar中定义了redissonConfig这个bean。然后我自己的项目也定义了redissonConfig这个bean。导致项目启动报错。所以使用如下方式,排除jar中的RedissonConfig.class。

@ComponentScan(basePackages={"com.xx.xx.*"},excludeFilters=@ComponentScan.Filter(type=FilterType.ASSIGNABLE_TYPE,classes={RedissonConfig.class}))

@ComponentScan注解。扫描或解析的bean只能是Spring内部所定义的,比如@Component、@Service、@Controller或@Repository。如果有一些自定义的注解,比如@Consumer、这个注解修饰的类是不会被扫描到的。这个时候我们就得自定义扫描器完成这个操作。

配置文件中使用的:component-scan标签底层使用ClassPathBeanDefinitionScanner这个类完成扫描工作的。@ComponentScan注解配合@Configuration注解使用,底层使用ComponentScanAnnotationParser解析器完成解析工作。

Springboot(四):springboot的注解有哪些注解

springboot的优点就是简化配置,,没有了xml,基本都是一个配置(application.properties)+注解来实现springboot的构建

那么都有哪些注解咧?说一下我在工作中常用的注解

1:##@SpringBootApplication

标识该类为SpringBoot项目启动类。并且让SpringBoot自动给程序进行必要的配置,等同于@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan这三个注解.

(1):@SpringBootConfiguration表示的是该类会作为Springboot的一个配置类,

(2):@EnableAutoConfiguration表示开启自动配置功能,里面也实现了自动配置原理

@Configuration会把组件会装配到实体类上封装为一个bean,AutoConfigurationImportSelector的selectImports()这个方法,找到所有JavaConfig自动配置类的全限定名对应的class,然后将所有自动配置类加载到Spring容器中。bean有了,配置有了,相当于对象也有了,这就是自动配置.

(3):@ComponentScan用来将包加入SpringIOC的包扫描,

2:@RestController和@Controller

@RestController相当于@Controller+@ResponseBody,

@RestController加在类上面的注解,使得类里面的每个方法都将json/xml返回数据加返回到前台页面中。

比如return"abc"前端会展示abc三个字母

@Controller加在类上面的注解,使得类里面的每个方法都返回一个视图页面。

比如return"abc"前端会展示静态资源中的的abc.html里面的内容

3:@component和@configuration

虽然Component注解也会当做配置类,但是并不会为其生成CGLIB代理Class,所以在生成Driver对象时和生成Car对象时调用car()方法执行了两次new操作,所以是不同的对象。当时Configuration注解时,生成当前对象的子类Class,并对方法拦截,第二次调用car()方法时直接从BeanFactory之中获取对象,所以得到的是同一个对象。

4:@Autowired与@Resource

@Resource和@Autowired都是做bean的注入时使用,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Spring支持该注解的注入。

@Autowired注解是按照类型(byType)装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它的required属性为false。如果我们想使用按照名称(byName)来装配,可以结合@Qualifier注解一起使用

@Resource默认按照ByName自动注入,由J2EE提供,需要导入包javax.annotation.Resource。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
我要问一下掇刀医保局恢复正常上班吗? 医保卡是东宝区的怎么才能转到掇刀区 东宝人社局 医保局 空调扇和风扇有什么区别 ...上了技校,现在上了电大的大专,档案在自己手里怎么办? 高职扩招的档案从哪里来 专科没有毕业档案怎么办 技校没上完考上专科,档案怎么转 凉薯和红薯有什么区别 凉薯和山药一样吗 我是一名教师 评职称发表论文 不知道网上哪些机构好点 具体? springboot注解原理(springbootapplication注解原理) Spring Boot、Spring Cloud 单元测试自动注入依赖 放任你英文怎么么写 什么菜需要放蒜苗才能吃 经常吃爆米花健康吗 爆米花的功效与作用吃爆米花的好处 爆米花吃多了有什么危害 吃爆米花的危害有哪些 怎样把四个人拍的照片合成一个人? 王者荣耀半肉老夫子怎么玩 出装及玩法技巧分享 取卵后腹水症状是什么 试管婴儿取卵出现腹水有什么症状 试管婴儿促排取卵后腹水症状有哪些 SQL函数MID() 函数 SQL系列(四)字符串截取函数 sql截取指定字符前面? 取卵后怎么判断腹水 如何通过SQL截取指定字段某一个字符的前面或后面的字符串? 桃花峪滑雪场怎么样 个人工伤申报的时间有限制吗 猫买什么药驱弓形虫好 多久驱一次 springboot依赖注入顺序? springboot手动注入bean(springboot手动注入service) 【Spring Boot 初识丨六】依赖注入 springboot启动成功? springboot怎么运行(springboot怎么运行html) springboot条件装配(springboot条件注入) 窗函数几种常用窗函数的性质和特点 去世很久的身份证号政审 怎样用通俗易懂的方式解释窗函数? 龙年女宝宝带金字旁的名字 ()虽不能保证恒定的传动比,但传动平稳 山东省农村信用社网站 有去镇平想念上班的大学生么 山东省农村信用社联合社官网 山东省农村信用社深化改革 镇平想念离职了可以返厂吗 山东农联社现在叫什么 孕早期拉屎用力见红怎么办 孕早期拉屎用力见红的原因 见红了肚子微痛想拉屎 《神雕侠侣》中小龙女与杨过年龄相差多大??