Spring+Springmvc+mybatis学习(一)

使用idea搭建javaEE项目,这里没有把lib放入WEB-INF纯属个人喜好,但得注意在配置Artifacts得注意把lib配置到WEB-INF下面去,否则会报找不到类的错误。
这里写图片描述

项目启动后,若能访问index.jsp则项目配置正常。
项目启动后:按照spring,springmvc,spring+mybatis,的顺序进行学习。

spring测试:
1.引入spring包:
这里写图片描述
编写测试类:

package com.aa;


public class One {
    private String a;
    private String b;

    public String getA() {
        return a;
    }

    public void setA(String a) {
        this.a = a;
    }

    public String getB() {
        return b;
    }

    public void setB(String b) {
        this.b = b;
    }
}

package com.aa;


public class Two {

    private One o;

    public void setO(One o) {
        this.o = o;
    }
}

添加 app-context.xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="one" class="com.aa.One">
        <property name="a" value="this a of one"></property>
        <property name="b" value="this b of one"></property>
    </bean>
    <bean id="two" class="com.aa.Two">
        <property name="o" ref="one"></property>
    </bean>
</beans>

编写测试代码,进行测试。

package com.aa.test;

import com.aa.One; import com.aa.Two; import
org.springframework.context.ApplicationContext; import
org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test {

public static void main(String[] a){
    ApplicationContext ac = new ClassPathXmlApplicationContext("app-context.xml");
   One one=(One)ac.getBean("one");
    Two two=(Two)ac.getBean("two");


}

}

测试结果如下:
这里写图片描述

根据测试结果看,代码正常运行,在配置过程中出了不少问题,然后接下来记录每一步出问题的地方:
1.jar包不全,当引入
spring-beans-4.3.7.RELEASE.jar
spring-context-4.3.7.RELEASE.jar
spring-core-4.3.7.RELEASE.jar
后 ,尝试运行test,但是报错:

Exception in thread “main” java.lang.NoClassDefFoundError:
org/apache/commons/logging/LogFactory at
org.springframework.context.support.AbstractApplicationContext.(AbstractApplicationContext.java:161)
at
org.springframework.context.support.AbstractApplicationContext.(AbstractApplicationContext.java:225)
at
org.springframework.context.support.AbstractRefreshableApplicationContext.(AbstractRefreshableApplicationContext.java:88)
at
org.springframework.context.support.AbstractRefreshableConfigApplicationContext.(AbstractRefreshableConfigApplicationContext.java:58)
at
org.springframework.context.support.AbstractXmlApplicationContext.(AbstractXmlApplicationContext.java:61)
at
org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:136)
at
org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:83)
at com.aa.test.Test.main(Test.java:12) at
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497) at
com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
Caused by: java.lang.ClassNotFoundException:
org.apache.commons.logging.LogFactory at
java.net.URLClassLoader.findClass(URLClassLoader.java:381) at
java.lang.ClassLoader.loadClass(ClassLoader.java:424) at
sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) at
java.lang.ClassLoader.loadClass(ClassLoader.java:357) … 13 more

这里发现spring本身需要依赖org.apache.commons.logging.LogFactory,引入:
commons-logging-1.1.3.jar
该包应当是spring用于记录日志所用,后面在项目中应该和其他日志框架结合起来进行日志的管理,该处需要后面再深入学习。

再次测试,依然报错:

Exception in thread “main” java.lang.NoClassDefFoundError:
org/springframework/expression/ParserContext at
org.springframework.context.support.AbstractApplicationContext.prepareBeanFactory(AbstractApplicationContext.java:629)
at
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:517)
at
org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:139)
at
org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:83)
at com.aa.test.Test.main(Test.java:12) at
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497) at
com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
Caused by: java.lang.ClassNotFoundException:
org.springframework.expression.ParserContext at
java.net.URLClassLoader.findClass(URLClassLoader.java:381) at
java.lang.ClassLoader.loadClass(ClassLoader.java:424) at
sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) at
java.lang.ClassLoader.loadClass(ClassLoader.java:357) … 10 more
发现缺少org.springframework.expression.ParserContext,引入
spring-expression-4.3.7.RELEASE.jar
该包看字面意思应该是spring表达式相关,后面再深入学习。
当引入
commons-logging-1.1.3.jar
spring-beans-4.3.7.RELEASE.jar
spring-context-4.3.7.RELEASE.jar
spring-core-4.3.7.REL EASE.jar
spring-expression-4.3.7.RELEASE.jar
后,测试正常。

以上 最基础的spring,应该差不多这样。

以注解的方式,测试代码

在lib中添加
spring-aop-4.3.7.RELEASE.jar
当在没有这个包的时候,测试会报错

Exception in thread “main” org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from class path resource [app-context.xml]; nested exception is java.lang.NoClassDefFoundError: org/springframework/aop/TargetSource
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:414)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:336)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:304)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:181)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:217)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:188)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:252)
at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:127)
at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:93)
at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:129)
at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:613)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:514)
at org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:139)
at org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:83)
at com.aa.test.Test.main(Test.java:12)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
Caused by: java.lang.NoClassDefFoundError: org/springframework/aop/TargetSource
at org.springframework.context.annotation.AnnotationConfigUtils.registerAnnotationConfigProcessors(AnnotationConfigUtils.java:154)
at org.springframework.context.annotation.AnnotationConfigBeanDefinitionParser.parse(AnnotationConfigBeanDefinitionParser.java:47)
at org.springframework.beans.factory.xml.NamespaceHandlerSupport.parse(NamespaceHandlerSupport.java:74)
at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1411)
at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1401)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:172)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:142)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:94)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:508)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:392)
… 19 more
Caused by: java.lang.ClassNotFoundException: org.springframework.aop.TargetSource
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
… 29 more

,同时修改app-context.xml
在id=”two”的bean中删除了*property name=”o” ref=”one”
增加context:annotation-config
同时修改代码

package com.aa;

import org.springframework.beans.factory.annotation.Autowired; import
org.springframework.stereotype.Component;

public class Two {

@Autowired
private One o;

public void setO(One o) {
    this.o = o;
} }

增加 @Autowired
测试可以正常运行。

删除app-context.xml中的
同时修改代码
package com.aa;

import org.springframework.beans.factory.annotation.Autowired; import
org.springframework.stereotype.Component;

@Component
public class Two {

@Autowired
private One o;

public void setO(One o) {
    this.o = o;
} }

增加@Component,但是运行的时候,代码报错,找不到bean。

修改app-context.xml ,删除

context:annotation-config

增加

context:component-scan base-package=”com.aa”

context:annotation-config context:component-scan base-package=”com.aa”是有差别的,查阅网上资料。 前者是用于激活那些已经在spring容器里注册过的bean;后者是包含前者功能的同时还可以在指定的package下扫描以及注册javabean。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值