Spring learning day 1

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/BIGSEACOMING/article/details/80955935

1.什么是IOC?:ioc即依赖注入,由spring管理类对象之间的依赖关系,降低编码造成对象之间的耦合度,使用配置的方式描述依赖关系。ioc容器负责创建,拼接,管理,获取对象。

2.什么是AOP?:aop即是一种面向切面的编程思想,允许进行预编译的方式或者实现在运行期动态代理来添加某一个功能,但是这种操作不会修改源码,只会修改编译后的字节码。

3.spring jdbc对传统的jdbc进行了薄层的封装,减少了编写的代码的重复性,如获取连接等。

4.在web.xml文件中配置自动启动spring mvc容器:

<context-param>
<param-name>
contextConfigLocation//配置spring配置文件的位置
</param-name>
<param-value>
classpath:smart-context.xml
</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener//当web容器启动的时候,自动启动spring容器
</listener-class>
</listener>

spring mvc也拥有一个配置文件,命名规则与web.xml中定义的servlet命名有联系,即是servlet名-servlet.xml.如:

<servlet>
<servlet-name>smart</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>smart</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>

类装载器的过程:

1.查找和导入calss文件

2.校验-class文件数据的正确性。准备-给类静态变量分配空间。解析-将符号应用转换成直接应用

3.初始化-对类的静态变量,静态代码块执行初始化

4.jvm装载是会产生三个装载器(根装载器,扩展装载器,应用类装载器)根装载器负责装载jre的核心类库,扩展装载器负责装载扩展目录ext下的jar包,应用加载器负责加载classpath下的类包。这三个加载器分别是继承关系。

nosuchmethodmethod错误:究其原因是由于类加载器的”全局负责委托机制“(当加载一个类时,此类的依赖类也有这个加载器加载,除非显示指定。委托机制就是先委托父加载器加载,只有再父加载器找不到时,再从自己的classpath下查找加载)引发的:比如两个同样的包,版本不同,当使用一个包中的方法,但是加载器却加载了另一个包,但是加载的那个包并没有对应的方法,这是就会抛出此错误。

类加载器与反射关系:

package reflect;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class reflecttest {

	public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {

	ClassLoader loader=Thread.currentThread().getContextClassLoader();
	Class classzz=loader.loadClass("reflect.car");
	Constructor<car> con=classzz.getDeclaredConstructor((Class[])null);
	car car1=con.newInstance();
	Method settype=classzz.getMethod("setType", String.class);
	settype.invoke(car1, "阿拉斯加");
	Method setage=classzz.getMethod("setAge", int.class);
	setage.invoke(car1, 113);
	Method setmaxspeed=classzz.getMethod("setMaxspeed", int.class);
	setmaxspeed.invoke(car1, 122);
	car1.say();
	}

}

猜你喜欢

转载自blog.csdn.net/BIGSEACOMING/article/details/80955935
今日推荐