小白のSpring日记总结(第二天学习内容)

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值