第一讲 Spring简介

一、Spring:春天 --- 给软件行业带来了春天。由Rod Johnson创建。

二、理念:使现有技术更加实用。本身是大杂烩,整合现有的框架技术。

三、Spring优点:

     轻量级框架
      IoC容器:控制反转
     AOP:面向切面编程
     对事务的支持
     对框架的支持
     ...

四、主要内容


五、IoC --- Inversion of Control(控制反转)

      案例1:


public interface UserDao {
     
      public void getUser();
     
}


public class UserDaoMySqlImpl implements UserDao {
      public void getUser() {
           System. out .println( "mysql获取用户数据" );
     }
}


public class UserDaoOracleImpl implements UserDao {
      public void getUser() {
           System. out .println( "oracle获取用户数据" );
     }
}


public interface UserService {
     
      public void getUser();
     
}


public class UserServiceImpl implements UserService {
//   private UserDao userDao = new UserDaoMySqlImpl();
      privateUserDaouserDao= null;
     
     publicvoidsetUserDao(UserDaouserDao) {
           this.userDao=userDao;
     }
     
      public void getUser() {
            userDao .getUser();
     }
     
}


public class Test {
      public static void main(String[] args ) {
//         UserService userService = new UserServiceImpl();
//         userService.getUser();
           UserServiceImpl userService = new UserServiceImpl();
            userService .setUserDao( new UserDaoMySqlImpl());
            userService .getUser();
           System. out .println( "----------------" );
            userService .setUserDao( new UserDaoOracleImpl());
            userService .getUser();
     }
}


   例如现在用MySql写了一个程序,但是用了一段时间以后,由于需要,要改用为Oracle。怎么办呢?如果按照以前的方法,新写一个
   OracleDao以后,以前用到MySqlDao的地方全部都要改为使用OracleDao。这样整个程序不仅改的地方多,而且还要重新编译。但
   是如果通过IoC的方式就不需要再改变原有代码了,只需要在使用的地方去接收需要的对象就好了。而且这个需要的对象可以通过配置
   文件来创建,这样原有代码就不需要做任何修改了。

      通过案例1:

          对象由原来程序本身创建,变为了程序接收对象。
          程序员主要精力集中于业务实现。
          实现了service和dao的解耦工作。service层和dao层实现了分离。没有直接依赖关系。
          如果dao的实现发生改变,应用程序本身不用改变。

     案例1使用spring来实现:(加上beans.xml修改Test.java)


<? 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 = "userDaoMySql" class = "com.liujie.dao.impl.UserDaoMySqlImpl" ></ bean >
      < bean id = "userDaoOracle" class = "com.liujie.dao.impl.UserDaoOracleImpl" ></ bean >
      < bean id = "userService" class = "com.liujie.service.impl.UserServiceImpl" >
            <!-- ref引用对象(对象是由spring来创建的) -->
            < property name = "userDao" ref = "userDaoOracle" ></ property >
            <!-- name="userDao"会去寻找userDaoOracle(即UserDaoOracleImpl)里面的getUserDao方法赋值 -->
      </ bean >
     
</ beans >


public class Test {
      public static void main(String[] args ) {
            //解析beans.xml文件,生成管理相应的bean对象
           ApplicationContext context = new ClassPathXmlApplicationContext( "beans.xml" );
           
           UserService userService =(UserService) context.getBean("userService" );
            userService .getUser();
     }
}


六、Hello Spring

    步骤:
            导入相关jar包
           编写spring配置文件(名称可以自定义)

      导入jar包

            < dependency >
                 < groupId > javax.servlet </ groupId >
                 < artifactId > javax.servlet-api </ artifactId >
                 < version > 3.0.1 </ version >
                 < scope > provided </ scope >
            </ dependency >
            < dependency >
                 < groupId > org.springframework </ groupId >
                 < artifactId > spring-webmvc </ artifactId >
                 < version > 4.2.1.RELEASE </ version >
            </ dependency >
            < dependency >
                 < groupId > javax.servlet </ groupId >
                 < artifactId > jstl </ artifactId >
                 < version > 1.2 </ version >
            </ dependency >

      Hello.java

public class Hello {
     
      //用来检查spring是否创建了Hello对象
      public Hello() {
           System. out .println( "hello,被创建" );
     }
      private String name ;
     
      public void setName(String name ) {
            this . name = name ;
     }
     
      public void show() {
           System. out .println( "hello," + name );
     }
     
}

      beans.xml

<? 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就是java对象,由spring容器来创建和管理 -->
     <!-- name值可以自定义 -->
      < bean name="hello" class = "com.liujie.bean.Hello" >
            < property name = "name" value = "spring" />
      </ bean >
     
</ beans >

      测试代码

public class Test {
      public static void main(String[] args ) {
            //解析beans.xml文件,生成管理相应的bean对象
           ApplicationContext context=newClassPathXmlApplicationContext("beans.xml");
           Hello hello = (Hello) context .getBean( "hello" );
            hello .show();
     }
}


    思考?
          Hello对象是谁创建的?
          Hello对象属性是怎么设置的?
          Hello对象是由spring容器创建的。
          Hello对象属性是由spring容器来设置的。

   这个过程就叫 控制反转:
    控制的内容:指谁来控制对象的创建。传统的应用程序对象的创建是由程序本身来控制的。使用spring后,是由spring来创建对
                     象的。
    反转:正转,指程序来创建对象。反转,指程序本身不去创建对象,而变为被动地接收对象。
   总结:以前对象是由程序本身来创建,使用spring后,程序变为被动接收spring创建好的对象。
   控制反转 --- 依赖注入(Dependency Injection,通过setter方法来进行注入的)

   IoC --- 是一种编程思想。由主动编程变为被动接收。

      IoC的实现是通过IoC容器来实现的。IoC容器 --- BeanFactory


BeanFactory context = new ClassPathXmlApplicationContext( "beans.xml" );

ApplicationContext context = new ClassPathXmlApplicationContext( "beans.xml" );

   BeanFactoryApplicationContext的一个父类。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值