spring笔记一

Spring最有用的地方就是IOC。虽然代码很简单,但实际上最有用。

IoC是什么?

Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。

我们在Biz的文件夹下面,创建一个类SpringContext.java

public    class    SpringContext{

  private   static    ApplicationContext  ctx;//静态变量
  //get()方法
  Public  static   ApplicationContext    getCtx(){

return    ctx;
}
static {

if(ctx == null){

ctx = new ClassPathXmlApplicationContext(“applicationContext.xml”);

}
}

这样,在使用spring调用对象时可以直接采用如下代码:

public void addBook(Tbook bk)throws Exception
{
     IBookDao dao =(IBookDao) SpringContext.getCtx( ).getBean(“bookDao”);
//这里调用单例模式的方法就可以得到Context 对象
}

用静态工厂方式对Bean进行实例化(创建类的对象)

applicationContext.xml:

<?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实例 -->
        <bean id="product" class="com.chinasofti.jingtai.StaticFactory"
           factory-method="getProduct">
          <!-- getProduct静态方法得到bean实例 -->
         </bean>
</beans>

Product  产品类

public class Product {

    public String getproducetname(){

        return "xiaomi10";
    }    

}

StaticFactory 静态工厂类

public class StaticFactory {
    //静态的方法 可以得到产品的对象
    public static Product getProduct(){
             return new Product();
    }

}

Test  测试类

ApplicationContext    app = new ClassPathXmlApplicationContext("com/chinasofti/util/applicationContext.xml");
Product product = (Product)app.getBean("product");
System.out.println(product.getproducetname());

用普通工厂方式对Bean进行实例化(创建类的对象)

applicationContext.xml:

<!-- 普通工厂得到bean实例 -->
   <bean id="putongFactory" class="com.chinasofti.putong.PutongFactory" >
   </bean>

 <bean id="product1" factory-bean="putongFactory" factory-method="getProduct">
  </bean>

PutongFactory  普通工厂类

public class PutongFactory {
    //非静态的方法得到另一个类的对象
    public Product getProduct(){
        return new Product();
    }
}

用构造器方式对Bean进行实例化(且这个实例一出生就拥有值)

构造方法分为二种:

一种是无参的,一种是有参的

我们可以用利用构造方法给类中的属性赋值。

applicationContext.xml:

 <bean id="dog" class="com.gouzao.Dog">
    <constructor-arg index="0" value="小白"></constructor-arg>
    </bean>
    <!-- Dog dog =new Dog("aaaa") -->

    <bean id="dog2" class="com.gouzao.Dog">
    <constructor-arg index="0" value="小黑"></constructor-arg>
    <constructor-arg index="1" value="3"></constructor-arg>
    </bean>
    <!-- Dog dog2=new Dog(aaaa,bbb) -->

    <bean id="dog3" class="com.gouzao.Dog"></bean>
    <!-- Dog dog =new Dog() -->

Dog

public class Dog {
    String name;
    int age;

    public Dog(){

        System.out.println("默认构造方法。。。。。");
    }

  public Dog(String str){
        name=str;
        System.out.println("自定义构造方法。。。。。str="+str+",age="+age);
    }

  public Dog(String str,int a){
        name=str;
        age=a;
        System.out.println("自定义构造方法。。。。。str="+str+",age="+age);
    }

    public void jiao(){
        System.out.println("wangwang!!!+str="+name+",age="+age);
    }

}

bean的作用域

其实就是描述bean的取值范围,和bean的有效时间,是通过配置文件来设定的

<bean id="dog"    class="com.chinasofti.beanManage.Dog" scope="singleton"    lazy-init="false">

</bean>

不写scope代表是单例设计模式(单个实例即个对象)

注:

scope="xx"代表作用域

1)scope="singleton" 单例的无论拿多少个对象,构造方法只走一次,且对象的内存地址都是相同的

我这次调用是这个对象,下次在调用也是这个对象

2)scope="prototype"  每次都创建一个新的对象,构造方法走多次,且对象的内存地址都是不相同的

每次调用都是新的对象

bean的初始化时间

其实就是spring创建javabean的时间

1)scope="prototype" 创建javabean的时间,每次获取对象实例时,都会创建.getBean("dog");每次这步都会创建一个对象

2) scope="singleton" 根据bean标签的属性值来选择创建时间

scope="singleton" lazy-init="true"  单例的,且延迟创建对象.getBean("dog");这步才创建对象

scope="singleton" lazy-init="false"  单例的,非延迟创建对象,在类被容器加载时就创建了

注:如果不写lazy-init代表false,被容器加载时就创建。

定义多个配置文件

当配置文件有多个时,我们可以把它们整合在一个配置里面

applicationContext.xml:

applicationContext2.xml

<?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">
        <import resource="/applicationContext2.xml"/>
</beans>
时间: 2024-10-24 16:03:20

spring笔记一的相关文章

Spring笔记(4)-----&lt;bean&gt;的基本配置

Spring容器成功需要具备的三个条件: 1)Spring框架的类包都已经放在应用程序的类路径下. 2)应用程序为Spring提供了完备的Bean配置信息. 3)Bean的类都已经放在类路径下. Spring启动时读取应用程序的Bean配置信息,在容器中生成一份相应的Bean配置注册表,然后根据这张注册表实例化Bean,装配好Bean的依赖关系,为上层应用提供准备就绪的运行环境. Bean的配置信息是Bean的元数据信息,有4部分: 1)Bean的实现类. 2)Bean的属性信息. 3)Bean

spring笔记(一)

这几日,在看spring框架的知识,了解了一下spring的IoC核心,AOP的概念,然后剩下的其实就是Spring对于其他的java服务的封装:ORM,web, JMS,JMX等. 坦白地说,我并没有完全理解spring的结构,首先它的API,我还不是很清楚,现在能至少做个分类.其次,spring框架和ORM之类的框架在做集成时的编程经验,我还没有. 后面的路要一分为二,继续对于spring底层的细节进行学习和了解,其次对于spring和其他组件整合的知识在实践中学习.看书估计不管用了. sp

Spring笔记(二):Ioc 之注入与装配

一.Spring依赖注入的原理 二.依赖注入的实现 (一)对象的注入 1.简单属性注入 1)源代码 package main.java.com.spring.ioc.base.dao.impl; import main.java.com.spring.ioc.base.dao.PersonDao; /** * * PersonDiDaoImpl * @title * @desc * @author SAM-SHO * @Dec 28, 2014 */ public class PersonDiD

Spring 笔记

1, 新建包或导入工程错误提示: The type javax.servlet.ServletContext cannot be resolved. It is indirectly referenced from required .class files. 解决方法:在安装的tomcat下的lib目录里面找到servlet-api.jar包,导入项目下的lib文件夹中即可. 2,Could not load the Tomcat server configuration at /Server

Spring笔记1

Spring依赖应用上下文xml文件(beans.xml或ApplicationContext.xml)进行对象定义,完成核心工作.可以在xml文件中import其他的xml文件(如数据库,<import resource="spring/dao/MySQL-datasource.xml"/>).beans为Map<String,Object>结构. AOP即面向切面编程(Aspect Oriented Programming). jdom包用于解析xml文件,

Spring笔记(一):Ioc 之 Bean的管理

前提: 1.需要 spring.dom4j.junit.commons-logging等的jar包, 配置web.xml,新增 applicationContext.xml 2.Spring主要核心是: 1)控制反转(IOC):以前传统的java开发模式中,当需要一个对象时我们,我们会自己使用new或者getInstance等直接或者间接调用构造方法创建一个对象,而在Spring开发模式中,Spring容器使用了工厂模式为我们创建了所需要的对象,我们使用时不需要自己去创建,直接调用Spring为

spring笔记(三)

Spring 第二天: 1. 代理模式 2. Aop编程 3.Spring对Jdbc的支持 JdbcTemplate工具类 思考: 程序的"事务控制", 可以用aop实现! 即只需要写一次,运行时候动态织入到业务方法上. Spring提供了对事务的管理,开发者只需要按照Spring的方式去做就行. 目标: 1. Spring声明式事务管理 * XML配置 *注解方式 2. Spring与Hibernate整合 3.  SSH整合 1. 程序中事务控制 1.1 环境准备 用户访问->

Spring笔记3

annotation(注解)(可见Spring_pref,3.11) 加入annotation,需要在beans.xml的<beans>标签加属性xmlns:context="http://www.springframework.org/schema/context",并在<beans>标签辖内加标签<context:annotation-config />.前者是新增的xml的命名空间,后者表示该xml文件的bean有参与注解的.前者属性中,冒号前

Spring笔记2

IOC/DI简介: DI为依赖注入,通常来说bean是自己控制对象的实例化等工作(即依赖关系).但在Spring容器中,创建bean的同时完成了注入依赖关系的工作. IOC为控制反转,其与DI的意义类似,即本来bean自己控制实例化,现在成了创建bean时便完成了实例化等依赖工作,所以称为控制反转. ”依赖注入(DI)背后的基本原理是对象之间的依赖关系(即一起工作的其它对象)只会通过以下几种方式来实现:构造器的参数.工厂方法的参数,或给由构造函数或者工厂方法创建的对象设置属性.因此,容器的工作就