第一讲 Spring简介

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

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

三、Spring优点:

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

四、主要内容


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

     案例1:


publicinterfaceUserDao {
     
     publicvoidgetUser();
     
}


publicclassUserDaoMySqlImplimplementsUserDao {
     publicvoidgetUser() {
           System.out.println("mysql获取用户数据");
     }
}


publicclassUserDaoOracleImplimplementsUserDao {
     publicvoidgetUser() {
           System.out.println("oracle获取用户数据");
     }
}


publicinterfaceUserService {
     
     publicvoidgetUser();
     
}


publicclassUserServiceImplimplementsUserService {
//   private UserDao userDao = new UserDaoMySqlImpl();
     privateUserDaouserDao= null;
     
     publicvoidsetUserDao(UserDaouserDao) {
           this.userDao=userDao;
     }
     
     publicvoidgetUser() {
           userDao.getUser();
     }
     
}


publicclassTest {
     publicstaticvoidmain(String[]args) {
//         UserService userService = new UserServiceImpl();
//         userService.getUser();
           UserServiceImpluserService=newUserServiceImpl();
           userService.setUserDao(newUserDaoMySqlImpl());
           userService.getUser();
           System.out.println("----------------");
           userService.setUserDao(newUserDaoOracleImpl());
           userService.getUser();
     }
}


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

     通过案例1:

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

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


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


publicclassTest {
     publicstaticvoidmain(String[]args) {
           //解析beans.xml文件,生成管理相应的bean对象
           ApplicationContextcontext=newClassPathXmlApplicationContext("beans.xml");
           
           UserServiceuserService=(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

publicclassHello {
     
     //用来检查spring是否创建了Hello对象
     publicHello() {
           System.out.println("hello,被创建");
     }
     privateStringname;
     
     publicvoidsetName(Stringname) {
           this.name=name;
     }
     
     publicvoidshow() {
           System.out.println("hello,"+name);
     }
     
}

     beans.xml

<?xmlversion="1.0"encoding="UTF-8"?>
<beansxmlns="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值可以自定义 -->
     <beanname="hello"class="com.liujie.bean.Hello">
           <propertyname="name"value="spring"/>
     </bean>
     
</beans>

     测试代码

publicclassTest {
     publicstaticvoidmain(String[]args) {
           //解析beans.xml文件,生成管理相应的bean对象
           ApplicationContextcontext=newClassPathXmlApplicationContext("beans.xml");
           Hellohello= (Hello)context.getBean("hello");
           hello.show();
     }
}


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

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

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

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


BeanFactorycontext=newClassPathXmlApplicationContext("beans.xml");

ApplicationContextcontext=newClassPathXmlApplicationContext("beans.xml");

   BeanFactoryApplicationContext的一个父类。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值