Spring ioc 常用 详解

[TOC]

Spring容器

配置对象时默认的单例的

可以设置bean的scope属性

  1. singleton 单例模式,只会在IOC容器初始化的时候创建bean,并且只会创建一次
  2. prototype 原型模式,在每次获取bean的时候才会创建bean,并且每次获取都会创建一个新的对象
  3. session 每个会话共享一个bean
  4. request 每个请求共享一个bean

配置的方式

  • 通过 属性名 对应 属性值 进行配置
  • 通过类的构造进行配置
  • 当一个javaBean中包含对像的属性时 可以通过(ref)引用的方式配置
  • list,map,set
<list>
    <ref bean="beanId"/>
</list>
<set>
    <ref bean="beanId"/>
</set>
<map>
    <entry key="AA" value-ref="b1"/>
    <entry key="BB" value-ref="b2"/>
</map>
  • bean 自动配置

    通过autowire可以实现bran的自动配置

    1. autowire="byName" 要求属性名与对象Bean的id相同
    2. autowire="byType" 要求自动配置的属性对象的类型与属性的类型一致且唯一
  • 配置 Properties
    <property name="properties">
    <props>
        <prop key="driverClassName">oracle.jdbc.driver.OracleDriver</prop>
        <prop key="url">jdbc:oracle:thin:@127.0.0.1:1521:XE</prop>
    </props>
    </property>
注解配置
<context:component-scan base-package="com.yuing.spring1"/><!--开启自动扫描组建-->
  • @Component 任意的java类
  • @Controller 控制层
  • @Repository DAO层
  • @Service 业务层

配置过滤器

  • exclude-filter 不包含过滤的条件
  • include-filter 包含过滤的条件 (在使用时应先关闭默认的过滤器use-default-filters="false")
  • type有五种类型
aspectj assignable custom regex annotation 根据注解过滤
org.springframework.stereotype.Component //@Component(任意一个类)
org.springframework.stereotype.Repository //@Repository
org.springframework.stereotype.Service //@Service
org.springframework.stereotype.Controller //@Controller

自动注入:@Autowire 标签贴在对象上 在容器中返回对象

<context:component-scan base-package="包名">
    <context:exclude-filter type="过滤的条件类型" expression="条件"/>
</context:component-scan>
<context:component-scan base-package="包名" use-default-filters="false">
    <context:include-filter type="过滤的条件类型" expression="条件"/>
</context:component-scan>

给bean的属性设置特殊值

  • 设置特殊字符串 "<",">"

    <!-- 在value标签中的<![CDATA[value]]> 中设置属性的值 -->
    <property name="propertyName">
    <value><![CDATA[<Java开发>]]></value>
    </property>
  • 设置空置
<property name="propertyName">
    <null/>
</property>

标签 属性

  • bean标签 配置javaBean对象
  • util标签 声明(list,map,set,property)
  • p标签 bean标签的属性 p:属性名="属性值"
  • context标签 加载外部文件
  • abstract:将bean的abstract属性设置为true时,该bean只能作为模板bean,不会被容器初始化

    子bean通过 parent="beanId" 加载模板

bean的生命周期

ClassPathXmlApplicationContext 容器 被初始化时里面的bean就都被创建ClassPathXmlApplicationContext 销毁时 bean 也跟着销毁

bean的属性

init-method="" :可以指定当bean加载成功后执行一个bean对象中的初始化方法

destroy-method="" :可以指定当bean即将销毁时 执行一个bean对象中的销毁的化方法

配置druid连接池 加载properties文件 调用其中的值

  • 加载properties文件
 <context:property-placeholder location="classpath:db.properties"/>
<bean class="com.alibaba.druid.pool.DruidDataSource" id="dataSource">
    <property name="username" value="${username}"/>
    <property name="password" value="${password}"/>
    <property name="url" value="${url}"/>
    <property name="driverClassName" value="${driverClassName}"/>
</bean>

SPEL:Spring的表达式语言

#{beanId}                  引用其他的bean对象
#{beanId.pro}              引用其他bean对象的属性值
#{beanId.methodName()}     调用方法得到返回值
#{田间 ? ‘真的返回值‘ : ‘假返回值‘}      三目运算

工厂Bean (FactoryBean

public class CarFactoryBean implements FactoryBean<Car> {} //以Car类为例
  • 配置的方式
<bean id="car" class="com.hwua.spring02.factory.CarFactoryBean"/>

Bean后置处理器(初始化之前 和初始化之后执行)

配置:

 <bean class="com.hwua.spring02.util.MyPostProcessor"/>

java代码:

public class MyPostProcessor implements BeanPostProcessor {
    @Override
    public Object postProcessBeforeInitialization(Object o, String s) throws
    //参数 o: Bean对象  s: Bean的id
    BeansException {
        System.out.println("MyPostProcessor.Before : "+o+",s:"+s);
        if(o instanceof Book){
            //是book
        }else if (o instanceof Car){
            //是Car
        }
        return o;
    }

    @Override
    public Object postProcessAfterInitialization(Object o, String s) throws BeansException {
        System.out.println("MyPostProcessor.After : "+o+",s:"+s);
        return o;
    }
}

java工厂类的配置(了解)

Java代码

public class StaticCarFactory {

    private static Map<String,Car> carMap = new HashMap<>();

    static {
        Car bmw = new Car();
        bmw.setBrand("BMW");
        bmw.setPrice(9.9);
        Car audi = new Car();
        audi.setBrand("audi");
        audi.setPrice(19.9);
        carMap.put("BMW",bmw);
        carMap.put("audi",audi);
    }

    public static Car createCar(String brand){
        return carMap.get(brand);
    }

}

xml代码

<!--静态工厂创建对象不需要实例化工厂类-->
<bean id="car" class="com.hwua.spring02.factory.StaticCarFactory"
      factory-method="createCar">
    <constructor-arg [name="参数名"] value="audi"/>
</bean>

<!--实例工厂需要先实例化工厂类-->
<bean id="carFactory" class="com.hwua.spring02.factory.InstanceCarFactory"/>

<!--使用工厂类创建Car对象-->
<bean id="car1" factory-bean="carFactory" factory-method="createCar">
    <constructor-arg [name="参数名"] value="audi"/>
</bean>

在Java类中使用:

ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");//创建容器的对象

ac.getBean(Class<T>|"IdString");//获取javaBean对象 当一个类配置了多个javabean时通过类和id可以锁定一个JavaBean
@Autowired      //自动装配(默认是根据class)
@Qualifier("bookServer")    //根据id进行装配
BookServer bookServer;

实例

<?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="person1" class="com.yuing.spring1.User">
        <property name="age" value="18"/>
        <property name="name" value="张三"/>
        <property name="book" ref="b1"/>
        <property name="book.name" value="oracle基础"/>
        <property name="book.price" value="99.8"/>
    </bean>

    <!--简单的javaBean-->
    <bean id="person2" class="com.yuing.spring1.User">
        <constructor-arg value="李四" name="name"/>
        <constructor-arg value="20" name="age"/>
    </bean>

    <bean id="person3" class="com.yuing.spring1.User">
        <constructor-arg value="李四" index="0"/>
        <constructor-arg value="20" index="1"/>
    </bean>
    <bean id="b1" class="com.yuing.spring1.pojo.Book">
        <property name="name" value="java基础"/>
        <property name="price" value="3.5"/>
    </bean>

</beans>

原文地址:https://www.cnblogs.com/yuing/p/8880733.html

时间: 2024-10-11 13:22:32

Spring ioc 常用 详解的相关文章

《一头扎进Spring4》学习笔记(二)Spring ioc 之详解

第一节 Spring ioc 简介 IOC(控制反转:Inverse of Control),又称作 依赖注入,是一种重要的面向对象编程的法则来削减计算机程序的耦合问题,也是轻量级的Spring框架的核心. 第二节 Spring ico 实例 1.接口类 1 public interface Tester { 2 public void test(); 3 } 2.实体类继承接口类 1 public class Lisi implements Tester{ 2 public void test

Spring IoC原理详解

去掌握一门技术的时候,往往很多人都忽略了一点,只是一味地去写代码,原理层面的东西从来就不理会 还有就是学习的过程中,不去想为什么有了当前的写法,却有着这么一门技术可以代替它 一般来说,在写程序的时候,一个类的实例创建都是直接通过 new className(); 语法来操作.说真的, 我写程序代码都不这么去做,我只需要在程序里定义一个接口类型的属性,直接通过属性来调用接口的方法 java代码: 1 public class Girl_1 implements Girl { 2 //定义一个接口类

Spring IoC 使用详解

在Spring中,依赖注入(DI)模式实现了控制反转(IoC)原理.让我们通过一个例子来帮助理解依赖注入.我们先看到java版的例子,然后在此基础上加上spring的功能.就例子而言,是相当地简单.QuizMater接口暴露了popQuestion()方法.为了保持简单性,QuizMaster将只生成一个问题. ? 1 2 3 4 5 6 7 8 9 /**  * QuizMaster.java  */ package com.vaannila; public interface QuizMas

C#依赖注入控制反转IOC实现详解

原文:C#依赖注入控制反转IOC实现详解 IOC的基本概念是:不创建对象,但是描述创建它们的方式.在代码中不直接与对象和服务连接,但在配置文件中描述哪一个组件需要哪一项服务.容器负责将这些联系在一起. 举个例子,组件A中有类ClassA,组件B中有接口IB和其对应的实现类B1和B2. 那么,现在ClassA需要利用IB接口来做一些事情,例如: public class ClassA { public void DoSomething() { IB b = ??? b.DoWork(); }} 现

Spring——jar包详解(转)

Spring——jar包详解 org.springframework.aop ——Spring的面向切面编程,提供AOP(面向切面编程)的实现 org.springframework.asm——spring 2.5.6的时候需要asm jar包,spring3.0开始提供它自己独立的asm jar包 org.springframework.aspects——Spring提供的对AspectJ框架的整合 org.springframework.beans——所有应用都用到,包含访问配置文件,创建和

Spring的配置详解

Spring的配置详解 3.1XML配置的结构 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www

转载:Spring MVC配置详解

以下内容引自:http://www.cnblogs.com/superjt/p/3309255.html spring MVC配置详解 现在主流的Web MVC框架除了Struts这个主力 外,其次就是Spring MVC了,因此这也是作为一名程序员需要掌握的主流框架,框架选择多了,应对多变的需求和业务时,可实行的方案自然就多了.不过要想灵活运用Spring MVC来应对大多数的Web开发,就必须要掌握它的配置及原理. 一.Spring MVC环境搭建:(Spring 2.5.6 + Hiber

一份spring配置文件及其详解

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/axu20/archive/2009/10/14/4668188.aspx 1.基本配置:<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/

Spring的lazy-init详解

Spring中lazy-init详解ApplicationContext实现的默认行为就是在启动服务器时将所有singleton bean提前进行实例化(也就是依赖注入).提前实例化意味着作为初始化过程的一部分,applicationContext实例会创建并配置所有的singleton bean.通常情况下这是一件好事,因为这样在配置中的任何错误就会被立刻实现(否则的话可能要话几个小时甚至几天). <bean id="testBean" class="cn.itcas