hello! 各位小伙伴儿,经过了两天的学习,我把自己的以下错误和理解总结了以下。也可能你刚学时可能也会遇到这些问题,不妨看一看,大家一起进步。如果大佬以为中重要的,或者错了,欢迎指导小白我啊。
maven配置
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.0.RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
注解说明
@Autowired:根据byName 来实现
@Qualifier(value = “cat1”) :当多个类型时 : 使用
@Rources: javax的包 比较高级:
@Component: <context:component-scan base-package=“POJO”/>
这个时前提: 表示你要扫描的包在哪里:
@Component
public class user {
@Value("小明")
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
位置放在 类名前!!!!!!! 注意: 小心有参构造器!
@Value(“小明”): 这个时属性注入: 放在属性标量名字前!
@Repository:用在Dao层
package Dao;
import org.springframework.stereotype.Repository;
@Repository
public class userDao {
}
@Service:用在service 的组件: 也是自动装配功能
package Services;
import org.springframework.stereotype.Service;
@Service
public class UserServices {
}
@Controller:用在servlet的组件:
import org.springframework.stereotype.Controller;
@Controller
public class UserServlet {
}
以上的四个注解: 都是将类配置到Spring中注册!!!!!
@Scope(“prototype”):设计模式的注解: 单例设计模式 和原型设计模式
Aop
第一种方法: 使用api接口:
重点: 是execution表达式的使用方法!
<bean id="log" class="UserServices.AfterLog"/>
<bean id="beforeLog" class="UserServices.BeforeLog"/>
<!--配置aop-->
<!-- execution 表达式的用法:
execution(* UserServices.ServiceImpl.*(..) )"
* : 随意
* 为类
类.*: 所有的方法
(..)表示为任意参数-->
<aop:config>
<!--切入点 "execution(* UserServices.ServiceImpl..*.*(..))"-->
<aop:pointcut id="piont" expression="execution(* UserServices.ServiceImpl.*(..))"/>
<!--执行环绕-->
<aop:advisor advice-ref="log" pointcut-ref="piont"/>
<aop:advisor advice-ref="beforeLog" pointcut-ref="piont"/>
</aop:config>
**第二种 是自定义的 切口类:
<!--自定义类2-->
<bean id="userServices" class="UserServices.ServiceImpl"/>
<bean id="afger" class="UserServices.before"/>
<aop:config>
<!--自定义切面 : aop:aspect -->
<aop:aspect ref="afger">
<!--自定义切点 -->
<aop:pointcut id="point" expression="execution(* UserServices.ServiceImpl.*(..))"/>
<!--通知 -->
<aop:after pointcut-ref="point" method="after"></aop:after>
</aop:aspect>
</aop:config>
第三种是 注解的使用:
<bean id="ed" class="UserServices.ServiceImpl"/>
<bean id="log" class="UserServices.before"></bean>
<aop:aspectj-autoproxy/>
public class before {
@Before("execution(* UserServices.ServiceImpl.*(..))")
public void after() {
System.out.println("===============前===============");
}
@After("execution(* UserServices.ServiceImpl.*(..))")
public void before(){
System.out.println("===============后===============");
}
}
@Aspect
@Before("execution( UserServices.ServiceImpl.*(…))")*
@After("execution( UserServices.ServiceImpl.*(…))")*
aop个人理解:
其实aop(面向切面的编程)就是对oop(面对对象编程)的一种“横向的扩展”
我们这样想:以往的oop编程更像是一条“流水线式的纵向开发过程” , 会导致我们想去扩容时 会破坏原本的代码秩序:
为了解决这种问题: 提出了aop:叫切面编程! 顾名思义:就是一个横向的扩展:在不破坏原有的基础上:并行写扩容的程序:
静态代理,动态代理个人理解:
如果把代理可以类比为现实生活中“中间商! 中介之类的:” :说白了:就是为了降低耦合性:在两个类之间增加一个“对于两方都有联系的类!”
静态的代理:就是一个“固定的中间商” 自己来定义类完成代理!
动态代理: 利用系统提供的反射类来完成代理:全程没有具体的代理类参加,利用的java的反射来实现的
Spring的aop的自己感悟
这是针对自己在这过程的犯的错误的小结:
总的来说:
1.是execution表达式的使用方法! 重中之重,可以说整个aop都在玩这个:如果这错了:BeanCreationException:
beans 装载错误:
Exception in thread "main" org.springframework.beans.factory.**BeanCreationException:** Error creating bean with name 'xxx'
warning no match for this type name: xxxx [Xlint:invalidAbsoluteTypeName]
2.注解使用位置的注意:细心点就行:
3.配置文件问题: maven的pom.xml 和你的bean配置文件:具体可自行百度:
测试文件 没有配置 xml文件
测试文件 没有配置 xml文件
Exception in thread "main"
java.lang.IllegalStateException: BeanFactory not initialized or already closed - call 'refresh' before accessing beans via the ApplicationContext
spring的beans文档配置出错: 少了aop的配置文档问题
警告: Ignored XML validation warning
org.xml.sax.SAXParseException; lineNumber: 19; columnNumber: 13; schema_reference.4: 无法读取方案文档 'https://www.springframework.org/schema/beans/spring-aop.xsd', 原因为 1) 无法找到文档; 2) 无法读取文档; 3) 文档的根元素不是 <xsd:schema>。
afterReturning 发挥空指针问题
Exception in thread "main" java.lang.NullPointerException
#报错总结:
1. 的错误! 一定要注意配置顺序:同时还有一些“异类” 比如我就多加了一个 。…
"C:\Program Files\Java\jdk-11.0.6\bin\java.exe" -ea -Didea.test.cyclic.buffer.size=1048576 "-javaagent:C:\java tool\idea\IntelliJ IDEA 2020.3.2\lib\idea_rt.jar=53115:C:\java tool\idea\IntelliJ IDEA 2020.3.2\bin" -Dfile.encoding=UTF-8 -classpath "C:\java tool\idea\IntelliJ IDEA 2020.3.2\lib\idea_rt.jar;C:\java tool\idea\IntelliJ IDEA 2020.3.2\plugins\junit\lib\junit5-rt.jar;C:\java tool\idea\IntelliJ IDEA 2020.3.2\plugins\junit\lib\junit-rt.jar;C:\Java Code\Spring\spring-08-Mybatis\target\test-classes;C:\Java Code\Spring\spring-08-Mybatis\target\classes;E:\java tool\localMavenRepoistory\repository\org\springframework\spring-webmvc\5.2.0.RELEASE\spring-webmvc-5.2.0.RELEASE.jar;E:\java tool\localMavenRepoistory\repository\org\springframework\spring-aop\5.2.0.RELEASE\spring-aop-5.2.0.RELEASE.jar;E:\java tool\localMavenRepoistory\repository\org\springframework\spring-beans\5.2.0.RELEASE\spring-beans-5.2.0.RELEASE.jar;E:\java tool\localMavenRepoistory\repository\org\springframework\spring-context\5.2.0.RELEASE\spring-context-5.2.0.RELEASE.jar;E:\java tool\localMavenRepoistory\repository\org\springframework\spring-core\5.2.0.RELEASE\spring-core-5.2.0.RELEASE.jar;E:\java tool\localMavenRepoistory\repository\org\springframework\spring-jcl\5.2.0.RELEASE\spring-jcl-5.2.0.RELEASE.jar;E:\java tool\localMavenRepoistory\repository\org\springframework\spring-expression\5.2.0.RELEASE\spring-expression-5.2.0.RELEASE.jar;E:\java tool\localMavenRepoistory\repository\org\springframework\spring-web\5.2.0.RELEASE\spring-web-5.2.0.RELEASE.jar;E:\java tool\localMavenRepoistory\repository\junit\junit\4.12\junit-4.12.jar;E:\java tool\localMavenRepoistory\repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar;E:\java tool\localMavenRepoistory\repository\javax\servlet\javax.servlet-api\3.0.1\javax.servlet-api-3.0.1.jar;E:\java tool\localMavenRepoistory\repository\org\mybatis\mybatis\3.5.2\mybatis-3.5.2.jar;E:\java tool\localMavenRepoistory\repository\mysql\mysql-connector-java\5.1.47\mysql-connector-java-5.1.47.jar;E:\java tool\localMavenRepoistory\repository\org\springframework\spring-jdbc\5.2.0.RELEASE\spring-jdbc-5.2.0.RELEASE.jar;E:\java tool\localMavenRepoistory\repository\org\springframework\spring-tx\5.2.0.RELEASE\spring-tx-5.2.0.RELEASE.jar;E:\java tool\localMavenRepoistory\repository\org\aspectj\aspectjweaver\1.9.4\aspectjweaver-1.9.4.jar;E:\java tool\localMavenRepoistory\repository\org\mybatis\mybatis-spring\2.0.2\mybatis-spring-2.0.2.jar;E:\java tool\localMavenRepoistory\repository\org\projectlombok\lombok\1.18.4\lombok-1.18.4.jar" com.intellij.rt.junit.JUnitStarter -ideVersion5 -junit4 mytest.test,SpringTest
4月 01, 2021 2:52:20 下午 org.springframework.context.support.AbstractApplicationContext refresh
警告: Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in class path resource [spring-dao.xml]: Invocation of init method failed; nested exception is org.apache.ibatis.builder.BuilderException: Error creating document instance. Cause: org.xml.sax.SAXParseException; lineNumber: 20; columnNumber: 17; 元素类型为 "configuration" 的内容必须匹配 "(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers?)"。
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in class path resource [spring-dao.xml]: Invocation of init method failed; nested exception is org.apache.ibatis.builder.BuilderException: Error creating document instance. Cause: org.xml.sax.SAXParseException; lineNumber: 20; columnNumber: 17; 元素类型为 "configuration" 的内容必须匹配 "(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers?)"。
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1803)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:595)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:860)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:878)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:144)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:85)
at mytest.test.SpringTest(test.java:32)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69)
at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33)
at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:220)
at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:53)
Caused by: org.apache.ibatis.builder.BuilderException: Error creating document instance. Cause: org.xml.sax.SAXParseException; lineNumber: 20; columnNumber: 17; 元素类型为 "configuration" 的内容必须匹配 "(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers?)"。
at org.apache.ibatis.parsing.XPathParser.createDocument(XPathParser.java:260)
at org.apache.ibatis.parsing.XPathParser.<init>(XPathParser.java:126)
at org.apache.ibatis.builder.xml.XMLConfigBuilder.<init>(XMLConfigBuilder.java:81)
at org.mybatis.spring.SqlSessionFactoryBean.buildSqlSessionFactory(SqlSessionFactoryBean.java:502)
at org.mybatis.spring.SqlSessionFactoryBean.afterPropertiesSet(SqlSessionFactoryBean.java:475)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1862)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1799)
... 34 more
Caused by: org.xml.sax.SAXParseException; lineNumber: 20; columnNumber: 17; 元素类型为 "configuration" 的内容必须匹配 "(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers?)"。
at java.xml/com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:204)
at java.xml/com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:135)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:396)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:327)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:284)
at java.xml/com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.handleEndElement(XMLDTDValidator.java:1923)
at java.xml/com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.endElement(XMLDTDValidator.java:865)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(XMLDocumentFragmentScannerImpl.java:1718)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2883)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:605)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:534)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:888)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:824)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
at java.xml/com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:246)
at java.xml/com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:339)
at org.apache.ibatis.parsing.XPathParser.createDocument(XPathParser.java:258)
... 40 more
Process finished with exit code -1
2.utf-8字节问题:xml中1字节的UTF-8序列的字节1无效
org.apache.ibatis.exceptions.PersistenceException:
### Error building SqlSession.
### The error may exist in com/ghh/dao/UserDao.xml
### Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: org.apache.ibatis.builder.BuilderException: Error creating document instance. Cause: com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: 1 字节的 UTF-8 序列的字节 1 无效。
可以直接改成UTF8 或者其他的格式:gbk之类的
也可以把maven的文件在一行配置
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
文档小结:
1.无论什么文档,如果报错为初始化错误类型: 基本都是文档配置出错了。一般来说是:
各种标签的顺序,标签的名字:或者在空白中手误输入一些符号之类的。
最后一句:
无论学习什么:都要从**“头”**入手。多看官方文档只有好处!以上只是个人的理解看法。只是分享,也欢迎留下你的看法。
Mybatis-spring
http://mybatis.org/spring/zh/getting-started.html
Mybatis
https://mybatis.org/mybatis-3/zh/index.html