Java Web Spring框架学习(一)

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项目是一样的,创建好以后还需要在目录骨架上加一些东西(我用的是全屏截图,看不清貌似可以到网页中打开图片):

Java Web Spring框架学习(一)_第1张图片

和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对象的方法有两种:
加载classpath: 
 ApplicationContext applicationContext =ClassPathXmlApplicationContext(“applicationContext.xml”);
或加载磁盘路径: 
ApplicationContext applicationContext =new FileSystemXmlApplicationContext(“applicationContext.xml”);

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;
    }
}

然后是测试类MybeanTest.java:(这部分是JUnit的知识)

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加载该配置文件时即调用接口方法

最后推荐一篇很好的入门文章:点击打开链接

你可能感兴趣的:(WEB,日志,Java学习)