Spring在Java web 项目中的开发

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

spring在上个学期就已经学完了,但是这个学期需要用到SSM框架来写毕业设计,所有重新回顾一下知识点

什么是spring框架

想要学习Java web 开发基本需要使用到各种框架,而spring是现在比较流行的一种了,以后会不会有更加出色的框架出现取代也不一定了。

我们知道平时我们要创建对象都是通过new运算符来实现的,但是这种方法其实非常的笨重,在项目中大量的new来new去,这个效率就跟不上,并且还需要开发人员维护,所以就有了spring框架的诞生了。这个框架主要就是让你能够不需要操心怎么创建一个类的对象,对象的创建与销毁都是框架帮忙,你只需要配置一下就可以了。

首先我们来看一下spring框架包中有什么东西

上面就是下载玩后的spring框架包解压后的目录了,docs里面都是一些相关的文档,libs就是其中的核心了。在看一下其中的包

带javadoc后缀的是文档包,里面有关于这相关包的使用,带sources后缀的是源文件包,也就是.Java文件,剩下的那个就是.class编译后的文件了,我们以后使用的都会是这个文件。这里面一个有20个功能块,60个包,给开发者提供不同的功能。

想要使用这些功能需要在一个spring专用的配置文件中配置声明一些相关属性才可以使用。

applicationContext.xml初始的配置文件
applicationContext.xml初始的图片

 上图就是新建的spring配置文件,刚创建的里面只有一个<beans>的根节点,以后的属性配置都是这个根节点中。

想要配置有关spring的属性,都是通过applicationContext.xml这个文件实现的,有关于spring配置都在这个文件里面了。spring不仅有可以帮你解决类的实例化问题,还可以实现事务管理、数据访问(连接数据库),web访问等等。

Java web 项目使用spring框架的过程

  1. 想要使用spring框架首先的去下载一个spring框架包。链接:链接https://pan.baidu.com/s/16Q0B3IegU2w9PnWJsMXoOA 密码:9m2m  这个可以直接下载解压的。
  2. 创建web项目并且将框架包导入到你的项目中。
  3. 导入包之后创建框架包的配置文件applicationContext.xml文件,我们想要使用spring带给我们的一些功能就需要在配置文件中配置了。

spring框架的主要特点

spring框架的主要特点是控制反转(IDC)和依赖注入,面向切面(AOP),看俩个专业名词很难理解,直接上代码演示一下,然后再解释

//需求:在测试类中调用Service类中的say方法
package com.test;

public class Service {

    public void say(){
        System.out.println("spring......");
    }
}


package com.test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test {

    public static void main(String[] args) {
        //方法一
        Service service = new Service();
        service.say();


        //方法二
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("com/config/ApplicationContext.xml");

        Service service1 = (Service) applicationContext.getBean("service");
        service1.say();
    }
}


/*
<?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="service" class="com.test.Service"></bean>


</beans>
*/

//为了使用Service类,第一种方法都看的懂,第二种方法用到了spring框架,而且用到了最主要的功能就
//是控制反转

在代码中,我们首先在配置文件中声名了一个<bean>节点,节点有Iid唯一标识符,有class代表声名的这个类的路径。然后我们在测试类中首先获取spring框架的对象ApplicationContext 通过这个对象我们才能操作在spring中声名的一切。然后我们可以通过这个对象还有声名的类id得到Service对象,此时我们并没有像第一种方法去new一个Service对象,而是交给了spring容器管理,我们直接使用此对象即可,虽然看上去第二种方法更加麻烦一些,但是当你有大量的类之后,你会发现你只需要new 一个spring容器对象,其他所有的对象都是以通过ApplicationContext对象来获取,用他们的话来说减少类与类之间的耦合性吧(我还没有真正理解这个东西)。

我对spring的理解就是:spring提供的是一个容器,一个你只要往里面存放类,然后就可以通过这个容器的对象不断生成你需要的对象,这个容器的对象就是代码中ApplicationContext 的对象,还有你想要使用spring提供的其他功能,例如数据库连接,事物管理,MVC配置,这些都需要使用到spring提供的类,使用这些类你就需要在配置文件中写<bean>节点去声名这些代表不同功能的类,一个<bean>节点代表一个类,id唯一标识符用来,class代表这个类的路径。控制反转通俗的说就是本来需要自己new的工作交给了spring容器,将创建对象的权利交给了spring容器,然后就取了一个控制反转的名词出来(嗯。。应该是这样)。

那什么是依赖注入呢,这其实在另一个方面来说明控制反转:一个类中有方法有属性对吧,但是在我们第一个程序中并没有看到属性,现在我们得出现属性了,还是先看代码吧,在前面代码的基础上增加一个对象属性

//需求:还是实现调用service中的方法say
package com.test;

public interface Dao {

    void say();
}


package com.test;

public class Service {

    private Dao dao;

    public void setDao(Dao dao){
        this.dao = dao;
    }
    public void say(){

        this.dao.say();
        System.out.println("spring......");
    }
}



package com.test;

public class Service {

    public void say(){
        System.out.println("spring......");
    }
}


package com.test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test {

    public static void main(String[] args) {
        //方法一
        Service service = new Service();
        service.setDao(new DaoImpl());
        service.say();


        //方法二
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("com/config/ApplicationContext.xml");

        Service service1 = (Service) applicationContext.getBean("service");
        service1.say();
    }
}


//配置文件
/*

<?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="daoImpl" class="com.test.DaoImpl"></bean>

    <bean id="service" class="com.test.Service">
        <property name="dao" ref="daoImpl"/>
    </bean>


</beans>

*/

//我们需要调用service里面的方法,这里面的方法有一个参数dao,如果正常Java代码就是通过set方法
//给service中的属性dao赋值,然后在调用方法。
//方法二通过spring容器来给service中的dao属性赋值,我们用到了daoImpl类跟Service类,所以我们在
//配置文件中声明俩个<bean>一个类对应一个<bean>然后service中的还没给dao属性赋值,我们通过
//<bean>的子节点<property>属性来调用service中的set方法赋值。
//name代表service中的属性名,ref代表你需要引用的类对应的<bean> id

/*
运行结果
spring dao .....
spring......


spring dao .....
spring......
*/

在上面代码中我增加的一个属性,然后通过spring来实例化这个Service类,而且将开发者给属性赋值的权利交给spring容器,我们只需要配置就行了,所以我们才说控制反转跟依赖注入其实就是同样的意思,都是由spring容器帮我们管理,我们只需要配置一下就不需要再去考虑了。

在这里面有个初学者很容易混淆的地方就是<property>节点下有一个ref和Value,其中ref指向在配置文件中声名的Id,Value一般都是开发者自己正常的值。我当初学的时候就是经常混淆这里个东西。属性不会只有对象,还可以是整型,字符串等等,你只要牢记想要通过spring来加载这些属性,那么久应该在对应的<bean>下的节点配置。

最后说一句,你只要把spring框架当做一个容器就行了,他不仅可以管理我们自己创建的类,而且还要管理spring框架中的其他类,说管理其实就是在配置文件中一个类对应一个<bean>然后获取配置文件对象取钱一样就行了....

嘿嘿,第一次总结。。。

QQ:1156999375

 

 

 

猜你喜欢

转载自blog.csdn.net/advancer_zkf/article/details/82805391