Spring框架是当前最流行的的Web框架之一,之前很火的企业级框架SSH框架指的就是Spring,Struts2,和Hibernate框架,当前最火的也是应用最火的是SSM框架,指的是Spring,SpringMVC,和Mybatis,可见Spring框架的重要性。
Spring的核心:
IOC:(Inverse of Control 反转控制)控制反转:将对象的创建权,交由Spring完成.
AOP : Aspect Oriented Programming 是 面向对象的功能延伸.不是替换面向对象,是用来解决OO中一些问题.
学习Spring框架主要需要具备的知识:JavaSE,JUnit,Maven,Servlet,一些XML的了解
我使用的集成开发环境是idea,首先new一个project选择maven下的webapp,一路和之前用maven创建webapp项目是一样的,创建好以后还需要在目录骨架上加一些东西(我用的是全屏截图,看不清貌似可以到网页中打开图片):
和maven项目一样在main和test下建好java目录,和resources用于放配置,然后右击文件选择mark as改成图片里面那些属性标记,然后java类当然是放在java目录下的包内,接下来就是导入Spring所需要的jar包,这个Maven完美解决,直接在中央库里找,找好打包安装刷新一下maven project那就好了,不会maven操作的可以看我之前的文章:点击打开链接 然后我把我的pom.xml发上来(我用maven下载好了jar包以后删掉了plugins的内容):
4.0.0
MySpring
MySpring
war
1.0-SNAPSHOT
MySpring Maven Webapp
http://maven.apache.org
org.springframework
spring-context
5.0.2.RELEASE
compile
junit
junit
4.9
下好了jar包就可以在main里的java中的resources里面创建applicationContext.xml,这是Spring用于管理的bean的文件,那么一个Maven管理的Spring项目骨架基本建好了,可以开始学习Spring了
自己反复看了几遍慕课网讲的Spring,感觉因为讲师跳的太快很多步骤都没讲,听得不是很明白,然后上网搜了几篇Spring入门博客看了大致了解了Spring的使用,原理细节什么的打算以后全部会使用了买本书慢慢专研。
我眼里的Spring大概是干嘛的:
所谓的框架其实就是一种代码的统一规范,这样在做复杂工程时可以简化操作,Spring也是一种代码规范,Spring项目里的对象的实例叫做bean,在java程序中你可以不必自己new一个你需要的对象,直接从Spring框架中的ApplicationContext容器里面取出一种叫bean的东西进行使用。然后applicationContext.xml配置文件就是对ApplicationContext容器里的bean进行管理,赋值初始化什么的,对bean进行赋值操作叫做注入,对bean进行操作有两种形式,配置文件和注解。
上传我的applicationContext.xml内容,然后会进行讲解:
从上到下,第一行说的是xml的版本号和编码格式,第二行下面的一坨就是Spring的名称空间(还不知道是干嘛的)
重点就是beans里面的内容,先说beans标签属性:default-init-method和default-destory-method,这个属性可以填也可以不填,如名字,分别是全局默认的初始化函数和全局默认的销毁函数,在创建beans标签下的bean时会自动调用这些类中的初始化函数,销毁bean的时候会自动调用销毁函数,都为public void类型,。然后每一个bean都有一个id,相当于你实例化类的名字,class就指向你需要实例化的类的位置,那么一个bean就创建好了。然后bean标签的子标签property是用于初始化bean的属性的,需要class指向的类中有相应的set函数,在实例化bean的时候会自动调用set函数,value就是你需要赋的值。
在类中使用bean的时候需要获得文件的静态ApplicationContext对象,用它的getBean(bean的id)方法可以得到一个Object对象,用下强制类型转化就可以获得你需要的类,然后就和一般的实例化对象一样用了。
我写的Mybean.java:
package Tools;
public class Mybean{
private String name;
private int age;
private int id;
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public void setId(int id) {
this.id = id;
}
public void Say(String sth)
{
System.out.println(name+","+age+","+id+","+sth);
}
}
然后获得一个ApplicationContext对象的方法有两种:
ApplicationContext对象有个getBean(String)方法,里面填bean的id就可以获得你想要的bean了
然后每次都要加载classpath很麻烦,我们可以通过写一个继承ApplicationContextAware接口类的对象,重写里面的public void setApplicationContext(ApplicationContext applicationContext)函数可以直接获得ApplicationContext对象,下面是我写的代码app.java:
package Tools;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class app implements ApplicationContextAware {
private static ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
app.context=applicationContext;
}
public static ApplicationContext getContext()
{
return context;
}
}
package Tools;
import org.junit.Test;
public class MybeanTest {
@Test
public void SayTest()
{
Mybean temp=(Mybean) app.getContext().getBean("mybean");
temp.Say("Spring test!");
}
}
运行下Test就可以得到测试结果:
hjy,19,1008611,Spring test!
取自慕课网的笔记:
生命周期:定义,初始化,使用,销毁 初始化: 方法1.实现InitializingBean接口,使用接口提供的初始化方法 方法2.在配置文件中bean节点init-method添加init-method="methodInit"属性,在对应的类中使用自定义的初始化方法 方法3.在配置文件的全局变量中,提供default-init-method="methodInit"属性,在对应的类中使用自定义的初始化方法 销毁(和初始化类似) 方法1.实现DisposableBean接口,使用接口提供的销毁方法 方法2.在配置文件中为对应的bean节点destory-method添加destory-method="methodDestory"属性,使用自定义的销毁方法 方法3.在配置文件的全局变量中,提供default-init-destroy="methodDestory"属性,在对应的类中使用自定义的销毁方法 注意: 三种方法的执行顺序等级:方法1>方法2>方法3,方法3可以被方法1/方法2覆盖
#spring——bean的配置及作用域# 1.bean的常用配置项:(理论上只有class是必须的) id:唯一标识 class:具体是哪一个类 scope:范围 constructor arguments:构造器的参数 properties:属性 Autowiring mode:自动装配模式 lazy-initialization mode:懒加载模式 initialization/destruction method:初始化/销毁的方法 2.bean的作用域 singletion 单例 bean容器只有唯一的对象(bean的scope属性,默认模式) prototype 每次请求会创建新的实例,destory方式不生效(bean的scope属性) request 对于request创建新的实例,只在当前request内有效 session 对于session创建新的实例,只在当前session内有效 global session 基于portlet(例如单点登录的范围)的web中有效,如果在web中同session
1.ApplicationContextAware 1.1 接口方法:setApplicationContext 1.2 作用:通常用来获取上下文对象,声明全局变量后在方法中对变量进行初始化并供其他方法调用 1.3 实现过程:创建一个类并实现ApplicationContextAware接口,重写接口方法public void setApplicationContext(ApplicationContext applicationContext);在xml文件中配置该类;当spring加载该配置文件时即调用接口方法 2.BeanNameAware 2.1 接口方法:setBeanName 2.2 作用:获取声明的类名,声明全局变量后在方法中对变量进行初始化并供其他方法调用 2.3 实现过程:创建一个类并实现BeanNameAware接口,重写接口方法public void setBeanName(String name);在xml文件中配置该类;当spring加载该配置文件时即调用接口方法
最后推荐一篇很好的入门文章:点击打开链接