Java——spring入门

1.Spring的优点

(1)方便解耦,简化开发。Spring就是一个大工厂,可以将所有对象创建和依赖关系维护,交给Spring管理。
(2)AOP编程的支持。Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能。
(3)声明式事务的支持只需要通过配置就可以完成对事务的管理,而无需手动编程。
(4)方便程序的测试。Spring对Junit4支持,可以通过注解方便的测试Spring程序。
(5)方便集成各种优秀框架。Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如:Struts、Hibernate、MyBatis等)的直接支持。
(6)降低JavaEE API的使用难度。Spring对JavaEE开发中非常难用的一些API(JDBC、JavaMail、远程调用等),都提供了封装,是这些API应用难度大大降低。

 

2.Spring的模块

 

 

 

3.Spring IOC的底层实现原理

最初两个类之间互相调用需要实现另一个类的对象。
这样不利于解耦。之后就是面向接口编程。

程序设计需要满足ocp原则,也就是open-close原则,
对程序扩展是open的,对修改程序代码是close,
需要尽量做到不修改程序的源码,实现对程序的扩展。

之前我们使用工厂模式,来实现松耦合,但是单纯的使用工厂模式,并不彻底。

spring通过工厂+反射+配置文件的方式来实现程序的解耦。
比如可以这样实现:

<bean id=“us” class="com.imooc.UserServiceImpl">

class FactoryBean{
    public static Object getBean(String id){
        反射    
    }
}

通过传入id,来实例化对应的类对象。

 

4.Spring快速入门

开发流程:

      下载Spring开发包
  复制Spring开发jar包到工程
  理解IOC控制反转和DI依赖注入
  编写Spring核心配置文件
  在程序中读取Spring配置文件,通过Spring框架获得Bean,完成相应操作。

1)使用maven构建项目
2)导入项目依赖
  spring-core
  spring-context
  spring-beans
  spring-expression
  commons-logging
  log4j

<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>3.8.1</version>
  <scope>test</scope>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-core</artifactId>
  <version>4.2.8.RELEASE</version>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-context</artifactId>
  <version>4.2.8.RELEASE</version>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-beans</artifactId>
  <version>4.2.8.RELEASE</version>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-expression</artifactId>
  <version>4.2.8.RELEASE</version>
</dependency>
<dependency>
  <groupId>commons-logging</groupId>
  <artifactId>commons-logging</artifactId>
  <version>1.2</version>
</dependency>
<dependency>
  <groupId>log4j</groupId>
  <artifactId>log4j</artifactId>
  <version>1.2.17</version>
</dependency>

3)简单实现

(1)传统方法

a.创建接口类

public interface UserService {
    public void sayHello();
}

b.实例化一个对象

public class UserServiceImpl implements UserService {
    public  void sayHello() {
        System.out.println("Hello Spring");
    }
}

c.调用

public void demo1(){
    UserService userService = new UserServiceImpl();
    userService.sayHello();
}

(2)Spring解决方式

a.创建一个Spring配置文件

<bean id="userService" class="com.imooc.ioc.demo1.UserServiceImpl"></bean>

b.通过id来获取对应的对象

public void demo2(){
    ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");   //创建Spring得工程
    UserService userService = (UserService) applicationContext.getBean("userService");  //通过工厂获取类
    userService.sayHello();
} 

既通过工厂管理类,后面通过ID来找对应的类,如何找到接口下的对应类了,此时我只需要通过类命,然后强转,就可以获得类对象。
这样只需要通过类名,就可以获取类,同时又有接口的约束。

 

5.IOC和DI的概念

 IOC Inverse of Control反转控制的概念,就是将原本在程序中手动创建UserService对象的控制权,交由SPring框架来管理,然后通过工厂来创建就可以了。

DI Dependency Injection依赖注入的概念,就是在Spring创建这个对象的过程中,将这个对象所依赖的属性注入进去。

在Spring中,只需要在配置文件中:

<bean id="userService" class="com.imooc.ioc.demo1.UserServiceImpl">
    <!--设置属性-->
    <property name="name" value="李四" />
</bean>

然后就可以配置,spring会自动调用set和get方法。然后工厂类及其结构类自然不需要修改。

依赖注入的目的是在代码之外管理程序组件的依赖关系,依赖注入减少了程序组件之间的耦合。

 

posted @ 2020-03-18 19:18  明王不动心  阅读(364)  评论(0编辑  收藏  举报