Spring学习(二)IOC入门-Spring的bean管理(xml方式)

一、IOC

Spring的两大核心机制是IOC(控制反转)和AOP(面向切面编程),
IOC是典型的工厂模式,通过工厂去注入对象。
AOP则是代理模式的体现。
现在我们来详细了解IOC,IOC是Spring框架的灵魂,非常重要,理解了IOC才能掌握Spring框架如何使用。IOC也叫控制反转,首先从字面意思理解,什么叫控制反转?反转的是什么?
在传统的程序开发中,需要调用对象时,通常由调用者来创建被调用者的实例,即对象是由调用者主动new出来的。但是在Spring框架中创建对象的工作不再由调用者来完成,而是交给IOC容器来创建,再推送给调用者,整个流程完成反转,所以称为控制反转。
简单来说就是:ioc中对象的创建不是通过new方式实现,而是交给Spring进行配置来创建类的对象,把对象的创建交给Spring进行管理。

二、传统方式

1.创建Student类

public class Student {
    private int id;
    private  String name;
	
    public Student() {
		super();
	}
    
	public Student(int id, String name) {
		super();
		this.id = id;
		this.name = name;
	}
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
    
}

2.测试方法中调用构造函数创建对象。

 public class Test {
            public static void main(String[] args) {
                Student student = new Student();
                System.out.println(student);
            }
        }

三、通过IOC来创建对象

1.添加Spring相关jar包
2.创建配置文件applicationContext.xml
3.调用API
首先在配置文件中配置bean标签,IOC容器通过加载bean标签来创建对象。
再调用API获取IOC创建的对象。

IOC容器可以调用无参构造或者有参构造来创建对象,我们先来看无参构造的方式。

<?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">
     <!-- 配置student对象-->
     <bean id="student" class="com.cf.entity.Student"></bean>
</beans>

1.配置一个bean标签:
id:对象名。
class:对象的模板类。
2.调用API获取对象
Spring提供了两种方式来获取对象:通过id或者运行时类。
1.通过id获取对象
第一步:加载applicationContext.xml配置文件,生成ApplicationContext对象。
第二步:调用ApplicationContext的getBean方法来获取对象,参数为配置文件中的id值。程序在加载applicationContext.xml时创建student对象,通过反射机制调用无参构造函数,所有要求交给IOC容器管理的类必须有无参构造函数。

    public class Test {
        public static void main(String[] args) {
            //1.加载spring.xml配置文件
            ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
            //2.通过id值获取对象
            Student student= (Student) applicationContext.getBean("student");
            System.out.println(student);
        }
    }

四、Spring的bean管理(xml方式)

1、在Spring里面通过配置文件创建对象就是bean实例化
2 、bean实例化三种方式实现(重点掌握第一种,后两种了解即可)
第一种 使用类的无参数构造创建(重点)
如果没有写无参的构造,会默认有一个无参的构造。如果写了有参的构造就必须有无参数的构造。类里面没有无参数的构造,出现异常。
第二种 使用静态工厂创建
(1)创建静态的方法,返回类对象
第三种 使用实例工厂创建
(1)创建不是静态的方法,返回类对象

bean标签常用属性
(1)id属性:起的对象的名称,id属性值名称可以任意命名。但是id属性值不能包含特殊符号,不能写中文。根据id值得到配置对象。
(2)class属性:创建对象所在类的全路径
(3)name属性:功能和id属性一样的,id属性值不能包含特殊符号,但是在name属性值里面可以包含特殊符号。name现在已经不用了(struts1中用name,现在基本上都用struts2)
(4)scope属性(后面三个一般都不用)
singleton:这个是默认值,单例的,对象只能创建一次。
如果创建了两个对象,地址是一样的,其实是一个对象。
prototype:多例的,每次创建都是一个新的对象

public class Test {
    public static void main(String[] args) {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");
        User user1 = (User) applicationContext.getBean("user");
        User user2 = (User) applicationContext.getBean("user");
        User user3 = (User) applicationContext.getBean("user");
        System.out.println(user1 == user2);
        System.out.println(user1);
        System.out.println(user2);
        System.out.println(user3);
    }
}

request:创建对象把对象放到request域里面
session:创建对象把对象放到session域里面
globalSession:创建对象把对象放到globalSession里面。globalSession,全局的session,比如百度 登录百度贴吧,访问百度文库的时候就不需要再次登录一次,这就是一个全局的操作。(单点登录 redis)

五、属性注入介绍

1 属性注入
创建对象时候,向类里面属性里面设置值
比如说有一个类User,里面有一个属性username,现在想要在创建对象的时候向属性username注入属性值fafa。
2 属性注入的方式介绍(三种方式) 在java中
(1)使用set方法注入(重点)
(2)使用有参数构造注入
(3)使用接口注入(一般不用)
在Spring框架里面,支持前两种方式

注入复杂类型属性
1数组
2 list集合
3 map集合
4 properties类型 文件是键值对类型 注意Properties要导java.util中的包

    <!-- 注入复杂类型属性值 -->
    <bean id="person" class="cn.cf.entity.Person">
    	<!-- 数组 -->
    	<property name="arrs">
    		<list>
    			<value>张三</value>
    			<value>李四</value>
    			<value>王五</value>
    		</list>
    	</property>
    
    	<!-- list -->
    	<property name="list">
    		<list>
    			<value>张三</value>
    			<value>李四</value>
    			<value>王五</value>
    		</list>			
    	</property>
    	
    	<!-- map -->
    	<property name="map">
    		<map>
    			<entry key="aa" value="lucy"></entry>
    			<entry key="bb" value="mary"></entry>
    			<entry key="cc" value="tom"></entry>
    		</map>
    	</property>
    	
    	<!-- properties -->
    	<property name="properties">
    		<props>
    			<prop key="driverclass">com.mysql.jdbc.Driver</prop>
    			<prop key="username">root</prop>
    		</props>
    	</property>
    </bean>

六、Spring读取外部资源

一般开发中,数据库的配置会保存在一个properties文件中,便于维护,如果使用Spring容器来生成数据源对象,如何读取到properties配置文件中的内容?
1.创建jdbc.properties

driverName = com.mysql.jdbc.Driver
url = jdbc:mysql://localhost:3306/Spring?useUnicode=true&characterEncoding=UTF-8
user = root
password= root

2.spring.xml中配置C3P0数据源
第一步:导入外部资源文件。
使用context:property-placeholder标签,需要导入context命名空间。
第二步:通过${}表达式取出外部资源文件的值。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">

     <!-- 导入外部的资源文件 -->
     <context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder>

     <!-- 创建C3P0数据源 -->
     <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="user" value="${user}"></property>
        <property name="password" value="${password}"></property>
        <property name="driverClass" value="${driverName}"></property>
        <property name="jdbcUrl" value="${url}"></property>
     </bean>

</beans>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值