标签 springboot 下的文章

@Service 源码

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component // 看这里
public @interface Service {
    // ... 
}

@Controller 源码

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component // 看这里
public @interface Controller {
     // ...
}

@Repository 源码

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented // 看这里
@Component
public @interface Repository {
    // ...
}

@Service、 @Controller、@Repository元注解 都应用了 @Component ,这就能看出来从核心功能上讲,@Service、 @Controller、@Repository@Component 做的事情几乎完全一样:都是将一个类标识为 Spring Bean,交由 Spring 容器进行管理。但它们在语义和应用分层上有明确的区别。

  • Web 层 ( @Controller ) : 接收 HTTP 请求,调用服务层。
  • 服务层 ( @Service ) : 处理核心业务逻辑。
  • 持久层 ( @Repository ) : 与数据库进行交互。
  • @Component 是 Spring 框架中最基础、最通用的构造型注解。它的作用就是告诉 Spring:“请扫描这个类,为它创建一个实例(Bean),并放到 IoC 容器里管理起来。

Spring Event 是 Spring 框架内置的事件/监听器机制,是观察者模式的一种实现。它允许一个组件(发布者)发布一个事件,而其他一个或多个组件(监听器)可以订阅并响应该事件,而发布者和监听者之间没有直接的类依赖。

- 阅读剩余部分 -

Caused by: org.xml.sax.SAXParseException: 元素内容必须由格式正确的字符数据或标记组成。
    at java.xml/com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:204) ~[na:na]
    at java.xml/com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:178) ~[na:na]
    at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:400) ~[na:na]
    at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:327) ~[na:na]
    at java.xml/com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1465) ~[na:na]
    at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.startOfMarkup(XMLDocumentFragmentScannerImpl.java:2589) ~[na:na]
    at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2679) ~[na:na]
    at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:605) ~[na:na]
    at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:542) ~[na:na]
    at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:889) ~[na:na]
    at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:825) ~[na:na]
    at java.xml/com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141) ~[na:na]
    at java.xml/com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:247) ~[na:na]
    at java.xml/com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:342) ~[na:na]
    at org.apache.ibatis.parsing.XPathParser.createDocument(XPathParser.java:260) ~[mybatis-3.5.17.jar:3.5.17]
    ... 76 common frames omitted

请检查你的 XML 文件(如 MyBatis 的 mapper 文件、Spring 配置等),修正非法字符或结构