聊聊SpringBoot中组件⽆法被注⼊的问题
⽬录
SpringBoot中组件⽆法被注⼊
1、描述问题
2、解决问题
3、总结问题
解决在@Component注⼊为null
SpringBoot中组件⽆法被注⼊
1、描述问题
在SpringBoot中,⽆法通过注解@AutoWired来⾃动绑定实体bean或者组件component。
2、解决问题
⾸先检查⾃⼰的是否在实体类上加上了@Component这样的注解,@ComponentScan可以扫描的有@Service、
@Repository、@Componnet、@Controller、@RestController等注解的类。当项⽬启动的时候,说明在Spring容器中已经存在了这些组件,放我们请求绑定的时候,如@Autowired或者@Resourece时,通过IOC,会⾃动为我们添加⼀个对象到我们的当前类中。
但当我们这⼀切都做好了,却发现依旧不能通过@AutoWired进⾏绑定时,我们需要考虑需要绑定的对象是否存在⼀个⽆参构造函数(默认有,但是会被其他有参构造函数覆盖掉),下⾯的注解是我使⽤Lombok的注解。@Data包含了属性的Set/Get的⽅法,还有包括toString()、Equals()等。@NoArgs
Constructor表⽰构造⽆参函数。@AllArgsConstructor表⽰构造全参函数。
有了⽆参构造函数,基本就可以进⾏绑定,并且调⽤该对象的⽅法了。
3、总结问题
Spring通过DI(依赖注⼊)来实现IOC(控制反转)
常⽤的注⼊⽅式Spring容器有三种⽅式:
①构造⽅法注⼊,②Set⽅法注⼊,③接⼝注⼊。
⽅法⽐较多,放我们熟悉⼀种的时候,不妨去学习其他的⽅法,三者的注⼊⽅式都有⼀定的适⽤场景,这也是知识从点到⾯的过程。
解决在@Component注⼊为null
package com.gblfy;
import org.springframework.stereotype.Component;
import ansaction.annotation.Transactional;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
/**
* @author gblfy
* @ClassNme BaseCommon
*/
@Component//关键点 1 为spring组件
public class BaseCommon {
//添加所需ConfigParam的私有成员
@Resource
private ConfigParam configParam;
// 关键点2 静态初使化⼀个⼯具类这样是为了在spring初使化之前
private static BaseCommon baseCommon;
//关键 3 通过@PostConstruct 和 @PreDestroy ⽅法实现初始化和销毁bean之前进⾏的操作
@PostConstruct
public void init() {
baseCommon = this;
// 初使化时将已静态化的configParam实例化
}
/**
* @param serviceName
* @throws Exception
*/
@Transactional
public void logWebService(String serviceName) throws Exception {
//关键点 4 调⽤时请使⽤此类静态变量 .对象例如:figParam
String params = Params(serviceName);
System.out.println("返回参数" + params);
}
}
spring ioc注解以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论