Springboot启动报错,错误如下:

 解决办法:在该service的实现方法上加@service注解,将该类自动注册到spring容器中。与spring的IOC机制有关。

 知识点整理:

1、ervice用于标注业务层组件,@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。

2、@service的作用

在spring中bean常在配置文件中进行配置。

如icationContext.xml文件里面的:

    <bean id="courseDAO"
         class="com.hzhi.course.dao.CourseDAOImpl" scope="prototype">
         ......    
    </bean>   

springboot简化了spring的配置方式,使用@service将@service的类自动注册到Spring容器,不需要再在applicationContext.xml文件定义bean了,类似的还包括@Component、@Repository、@Controller。

相当于:

@Service("courseDAO")
@Scope("prototype")
public class CourseDAOImpl extends HibernateDaoSupport implements CourseDAO{

    ......  
}

getBean的默认名称是类名(头字母小写),如果想自定义,可以@Service(“aaaaa”)这样来指定,即暴露出的接口名字。
这种bean默认是单例的,如果想改变,可以使用@Service(“beanName”) @Scope(“prototype”)来改变。
可以使用以下方式指定初始化方法和销毁方法(方法名任意):
@PostConstruct
public void init() {
}
@PreDestroy
public void destory() {
}

单例模式

单例模式有以下特点:  

  1、单例类只能有一个实例。
  2、单例类必须自己创建自己的唯一实例。
  3、单例类必须给所有其他对象提供这一实例。

目的

  单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。这些应用都或多或少具有资源管理器的功能。每台计算机可以有若干个打印机,但只能有一个Printer Spooler,以避免两个打印作业同时输出到打印机中。每台计算机可以有若干通信端口,系统应当集中管理这些通信端口,以避免一个通信端口同时被两个请求同时调用。总之,选择单例模式就是为了避免不一致状态,避免政出多头。

 

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐