Spring框架(一)

1、服务端的三层开发

        表现层、业务层(spring就属于业务层)、持久层

2、Spring是一个开放源代码的设计层面框架,它解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用 

3、Spring的核心是控制反转(IoC控制反转)和面向切面(AOP)。简单来说,Spring是一个分层的JavaSE/EEfull-stack(一站式) 轻量级开源框架。

4、Spring框架的优点

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

5、Spring的核心配置文件

<?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">
    
    <!--IOC管理bean-->
    <bean id="userService" class="cn.tx.service.UserServiceImpl" />
    
</beans>

(1)bean标签的一些属性

  • id属性:代表对象的唯一标识。可以看做一个人的身份证号
    • 注意,该id属性的值在配置文件中必须是唯一的

  • class属性:用来指定要创建的java对象的类名,这个类名必须是全限定类名(带包名)

  • scope属性,scope属性代表Bean的作用范围。

    • singleton单例(默认值),最常用的方式。

    • prototype多例

  • request应用在Web项目中,每次HTTP请求都会创建一个新的Bean

  • session应用在Web项目中,同一个HTTP Session 共享一个Bean

(2)bean对象的创建和销毁的两个属性配置

        Spring初始化bean或销毁bean时,有时需要作一些处理工作,因此spring可以在创建和拆卸bean的时候调用bean的两个生命周期方法

  • 方法一:init-method:当bean被载入到容器的时候调用init-method属性指定的方法
  • 方法二:destroy-method:当bean从容器中删除的时候调用destroy-method属性指定的方法
  • <!--默认情况单例 scope="singleton"  -->
    <bean id="userService" class="com.qcby.service.impl.UserServiceImpl" />
    <!--多例 scope="prototype" -->
    <bean id="userService" class="com.qcby.service.impl.UserServiceImpl" scope="prototype" init-method="init" destroy-method="destory"/>

(3)实例化Bean的三种方式

  • 无参的构造方法(默认,使用较多)
  • 静态工厂
    • /**
        * 静态工厂方式
       */
      public class StaticFactory {
          // 静态工厂方式
          public static UserService createUs(){
              System.out.println("通过静态工厂的方式创建UserServiceImpl对象...");
              // 编写很多业务逻辑 权限校验
              return new UserServiceImpl();
          }
      }
      
      //配置文件中的bean
      <bean id="us" class="cn.tx.demo1.StaticFactory" factory-method="createUs" />   

  • 动态工厂(实例工厂)
    • /**
       * 动态工厂方式
       */
      public class Dfactory {
          public UserService createUs(){
              System.out.println("实例化工厂的方式...");
              return new UserServiceImpl();
          }
      }
      
      //配置文件中的bean
      //因为现在是实例(对象),如果我们要调用方法,就必须现有对象所以我们要先写出动态bean
      <bean id="dfactory" class="cn.tx.demo1.Dfactory" />
      <bean id="us" factory-bean="dfactory" factory-method="createUs" />

(4)关于配置文件的名称

  • 该配置文件的名字不是必须是aplicationContext,是我们自己提供的
  • 可以有多个这样的配置文件 
  • 文件中配置的类(bean)不一定要是自己创建的类,jdk中的类也可以实现,只要这个类不是抽象的,并且提供了无参数构造方法。

(5)底层生成类的实现方法

        spring的工厂生成类时其实是调用的类的构造方法,所以要想让spring给你创建对象,必须保证无参数构造方法是存在的(其实底层实现原理是反射机制)

(6)创建好的对象存储到一个什么样的数据结构当中了呢

        是一个map结构,如图所示

(7)getBean()方法返回的类型是Object,如果访问子类的特有属性和方法时,还需要向下转型,有其它办法可以解决这个问题吗

//第一种,进行强制类型转换
CollectionPojo collectionPojo = (CollectionPojo) applicationContext.getBean("collectionPojo");
//直接进行反射
CollectionPojo collectionPojo1 = applicationContext.getBean("collectionPojo", CollectionPojo.class);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值