Spring入门

 什么是spring,它能够做什么?
   Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。
   Spring使用基本的JavaBean来完成以前只可能由EJB(EJB 是为了"服务集群"和"企业级开发")完成的事情。
   然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。
   目的:解决企业应用开发的复杂性
   功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能
   范围:任何Java应用


   简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。

1、 IOC/DI
     将以前由程序员实例化对象/赋值的工作交给了spring处理

什么是控制反转(IoC):

谁控制谁,控制什么:传统Java SE程序设计,我们直接在对象内部通过new进行创建对象,是程序主动去创建依赖对象;而IoC是有专门一个容器来创建这些对象,即由Ioc容器来控制对象的创建以及外部资源获取(不只是对象包括比如文件等)。

可以理解为控制权由应用代码移交给外部容器(spring)

为何是反转,哪些方面反转了:有反转就有正转,传统应用程序是由我们自己在对象中主动控制去直接获取依赖对象,也就是正转;

而反转则是由容器来帮忙创建及注入依赖对象DI——Dependency Injection,是组件之间依赖关系由容器在运行期决定,形象的说,即由容器动态的将某个依赖关系注入到组件之中。通过依赖注入机制,我们只需要通过简单的配置,而无需任何代码就可指定目标需要的资源,完成自身的业务逻辑,而不需要关心具体的资源来自何处)

理解DI的关键是:“谁依赖谁,为什么需要依赖,谁注入谁,注入了什么”


由容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象,所以是反转,依赖对象的获取被反转了。
   

2、如何使用Spring

在resources目录右键 New -> Spring -> Spring Bean Configuration File

配置web.xml

        <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> </web-app>

        在pox.xml中进行jar包装载

<!--在properties中配置-->
<properties>
    <spring.version>5.0.1.RELEASE</spring.version>
<properties>

<!--在<dependencies>中配置-->
    <dependencies>
    <!--spring-context-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <!--spring-core-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>${spring.version}</version>
    </dependency>
    </dependencies>

3、如何配置Bean

创建一个spring.xml里面配置Bean

<!--bean就是java对象,由Spring创建和管理-->

<!-- id 是bean的标识符,要唯一,如果没有配置id,name就是默认标识符 如果配置id,又配置了name,那么name是别名 name可以设置多个别名,可以用逗号,分号,空格隔开 如果不配置id和name,可以根据applicationContext.getBean(.class)获取对象; class是bean的全限定名=包名+类名 -->

<!--scope:(singleton|prototype)默认是singleton-->

<!--init-method:指定bean的初始化方法-->

<bean id="hello" name="a b c" class="com.zking.spring.entity.Hello" scope="prototype" init-method="init" >
        <property name="name">

  id:在容器中查找Bean的id(唯一、且不能以/开头)


  class:bean的完整类名


 name:在容器中查找Bean的名字(唯一、允许以/开头、允许多个值,多个值之间用逗号或空格       隔  开)


 scope:(singleton|prototype)默认是singleton


 singleton(单例模式):在每个Spring IoC容器中一个bean定义对应一个对象实例


 prototype(原型模式/多例模式):一个bean定义对应多个对象实例


 abstract:将一个bean定义成抽象bean(抽象bean是不能实例化的),抽象类一定要定义成抽象             bean,  非抽象类也可以定义成抽象bean

<bean id="person" class="com.zking.spring.entity.Person" abstract="true">
        <property name="name" >
            <value>佚名</value>
        </property>
    </bean>

 parent:指定一个父bean(必须要有继承关系才行)

<bean id="student" class="com.zking.spring.entity.Student">
        <property name="sid">
            <value>1</value>
        </property>
        <property name="name">
            <value>张三</value>
        </property>
        <property name="score">
            <value>100</value>
        </property>
        <property name="birthday">
            <bean factory-bean="dateFormat" factory-method="parse">
                <constructor-arg value="2018-02-01">
                </constructor-arg>
            </bean>
 

  init-method:指定bean的初始化方法

</property>
        <property name="address">
            <ref bean="address"></ref>
        </property>
 

 constructor-arg:使用有参数构造方法创建javaBean

<bean id="hello1"  class="com.zking.spring.entity.Hello"  >

<!--index=“0”中的0代表下标 0是第一个下标-->
        <constructor-arg index="0">
            <value>王武</value>
        </constructor-arg>
    </bean>

 日期格式注入

<property name="birthday">
            <bean factory-bean="dateFormat" factory-method="parse">
                <constructor-arg value="2018-02-01">
                </constructor-arg>
            </bean>
        </property>

 在Student中要有此日期类型的属性

Student student = ac.getBean("student", Student.class);
        System.out.println(student.getBirthday().toLocaleString());

配置读取文件的读取方式

 //读取单个文件
//        ApplicationContext ac=new ClassPathXmlApplicationContext("spring.xml");

        //读取多个文件
//        ApplicationContext ac=new ClassPathXmlApplicationContext(new String[]{"spring.xml","spring-address.xml"});

        //通配方式

        <!--"spring-*.xml 中的*号必须有前缀不能只是*.xml-->
//        ApplicationContext ac=new ClassPathXmlApplicationContext("spring-*.xml");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值