Spring框架之基础入门讲解

目录:IOC

           AOP

           JDBC

          事务管理


一、IOC

1.IOC(Inversion Of Control):反转资源获取的方向。传统的资源查找方式要求组件向容器发起请求查找资源,作为回应,容器适时的返回资源。应用IOC后,则是容器主动地将资源推送给它所管理的组件,组件所要做的仅是选择一种合适的方式来接受资源。这种方式也被称为查找的被动形式。

2.DI(Dependency Injection)---IOC的另一种表达方式:组件以一些预先定义好的方式(如:setter方法)接受来自容器的资源注入。

3.在Spring的IOC容器中配置Bean

<!-- 配置bean-->
<bean id="helloWorld" class="test1.HelloWorld">
<property name="name" value="Spring"></property>
</bean>
     class:bean的全类名:通过反射的方式在IoC容器中创建Bean所以要求Bean中必须有无参的构造器

     id:bean的名称:(1)在IoC容器中必须是唯一的。

                                  (2)若id没有指定,Spring自动将全类名作为Bean的名字

                                  (3)id可以指定多个名字,名字之间用逗号,分号,或空格分隔

4.Spring容器

       在SpringIOC容器读取Bean配置创建Bean实例之前,必须对它实例化。只有在容器实例化后,才可以从IOC容器里获取Bean实例并使用。
      Spring提供了两种类型的IOC容器实现
          (1)BeanFactory   IOC 容器的基本实现
          (2) ApplicationContext   提供了更多的高级特性,是BeanFactoryde 子接口
        BeanFactory是Spring框架的基础设施,面向Spring本身
        ApplicationContext面向使用Spring框架的开发者,几乎所有的应用场合都直接使用ApplicationContext而非底层的BeanFactory
        无论使用何种方式,配置文件时相同的

5.ApplicationContext
    主要实现类:

     (1)ClassPathXmlApplicationContext:从类路径下加载配置文件

     (2)FileSystemXmlApplicationContext:从系统中加载配置文件

ConfigurableApplicationContext扩展于ApplicationContext,新增加两个方法:

refresh()close(),让ApplicationContext具有启动、刷新和关闭上下文的能力

ApplicationContext在初始化上下文时就实例化所有单例的Bean

WebApplicationContext是专门为WEB应用而准备的,它允许从相对于WEB根目录的路径中完成初始化工作。



6.从IoC容器中获取Bean

 调用ApplicationContext中的getBean()方法


7.依赖注入的方式

   (1)属性注入

            属性注入即通过setter方法注入Bean的属性值或对象

            属性注入使用<proprety>元素,使用name属性指定bean的属性名称,value属性或<value>子节点指定属性值

            属性注入是实际应用中最常用的注入方式

<property name="userName" value="zy"></property>

   (2)构造器注入

            通过构造方法注入Bean的属性值或依赖的对象,它保证了Bean实例在实例化后就可以使用

            1)按索引匹配入参

<bean id="car" class="test1.Car">
<constructor-arg value="Audi" index="0"></constructor-arg>
<constructor-arg value="Shanghai" index="1"></constructor-arg>
<constructor-arg value="30000" index="2"></constructor-arg>
</bean>
              2)按类型匹配入参

<bean id="car" class="test1.Car">
<constructor-arg value="Audi" type="java.lang.String"></constructor-arg>
<constructor-arg value="Shanghai"type="java.lang.String"></constructor-arg>
<constructor-arg value="30000" type="int"></constructor-arg>
</bean>

    (3)工厂方法注入(少用,不推荐)


8.注入属性的细节

  字面值:可用字符串表示的值,可以通过<value>元素标签或value属性进行注入
  基本数据类型及其封装类、String等类型都可以才去字面值注入的方式
  若字面值中包含特殊字符,可以使用<![CDATA[字符串]]>把字面值包裹起来

<constructor-arg type="java.lang.String">
     <value><![CDATA[<Shanghai^>]]></value>
</constructor-arg>

9.引入其他的Bean

   组成应用程序的 Bean 经常需要相互协作以完成应用程序的功能. 要使 Bean 能够相互访问, 就必须在 Bean 配置文件中指定对 Bean 的引用
   在 Bean 的配置文件中, 可以通过 <ref> 元素或 ref  属性为 Bean 的属性或构造器参数指定对 Bean 的引用.

<bean id=car2 class="test1.Car">
<property name="car2" ref="car">
</bean>
也可以在属性或构造器里包含 Bean 的声明, 这样的 Bean 称为内部 Bean
内部bean: 当 Bean 实例仅仅给一个特定的属性使用时, 可以将其声明为内部 Bean. 内部 Bean 声明直接包含在 <property> 或 <constructor-arg> 元素里, 不需要设置任何 id 或 name 属性.内部 Bean 不能使用在任何其他地方


10.为级联属性赋值

<property name=”car.maxSpeed” value=”250”><property/>

11.注入null值。使用<null/>元素标签为Bean的字符串或其他对象类型的属性注入null。

12.

13.





20.基于注解的方式(基于注解配置Bean)

     组件扫描(component scanning):Spring能够从classpath下自动扫描,侦测和实例化具有特定注解组件

     特定组件包括:

       Component:基本注解,标识了一个受Spring管理的组件

       Respository:标识了持久层(DAO实现类)组件

       Service:标识服务层(业务层)组件

       Controller:标识表现层组件

    对于扫描到的组件,Spring有默认的命名策略:使用非限定类别,第一个字母小写。也可以在注解中通过value属性值标识组件的名称。

当在组件类上使用了特定的注解之后,还需要在Spring的配置文件中声明<context:component-scan>
        base-package属性指定一个需要扫面的基类包,Spring容器将会扫描这个基类包里及其子包中的所有类
        当需要扫描多个包时,可以使用逗号分隔

如果仅希望扫描特定的类而非基包下的所有类,可使用resource-pattern属性过滤特定的类



  <context:include-filter>  子节点表示要包含的目标类

  <context:exclude-filter> 子节点表示要排除在外的目标类

  <context:component-scan>下可以拥有若干个<context:include-filter>和<context:exclude-filter>子节点

组件装配:<context:component-scan>元素还会自动注册AutowiredAnnotationBeanPostProcessor实例,该实例可以自动装配具有@Autowired和@Resource和@Inject注解的属性

@Autowired注解自动装配具有兼容类型的单个Bean属性

   构造器,普通字段(即使是非public),一切具有参数的方法都可以应用@Autowired注解

   默认情况下,所有使用@Autowired注解的属性都需要被设置。当Spring找不到匹配的Bean装配属性时,会抛出异常。若允许一个属性不被设置,可以做以下设置

@Autowired(required=false)
   默认情况下,当IoC容器里存在多个类型兼容的Bean时,通过类型的自动装配将无法工作,此时可以在@Qualifier注解里提供Bean的名称,Spring允许对方法的入参标注@Qualifier 以指定注入Bean的名称
@Autowired
@Qualifier("userService")
@Autowired 注解也可以应用在数组类型的属性上, 此时 Spring 将会把所有匹配的 Bean 进行自动装配.
@Autowired 注解也可以应用在集合属性上, 此时 Spring 读取该集合的类型信息, 然后自动装配所有与之兼容的 Bean.
@Autowired 注解用在 java.util.Map 上时, 若该 Map 的键值为 String, 那么 Spring 将自动装配与之 Map 值类型兼容的 Bean, 此时 Bean 的名称作为键值




         

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值