Spring初探01_IOC简单实例

5 篇文章 0 订阅
2 篇文章 0 订阅

最近看了一部爱情喜剧《疯岳俏佳人》,里面的“爱情科技公司”便类似于Spring容器,在小岳岳类和姗姗类之间起着控制反转(IOC)的作用。控制的什么被反转了?获取对象的方式Spring被反转了。(由小岳岳主动出击追求姗姗反转成由爱情科技公司这一Spring这一第三方容器来执行创建)。IoC是Spring框架的核心内容,使用多种方式完美的实现了IoC,可以使用XML配置,也可以使用注解,本例采用XML配置的方式,完成一个简单的IOC Demo。话不多说,先上代码。


Environment: eclipse
DAO :IUserDao.java&UserDaoImpl.java
Service:IUserBiz.java&UserBizImpl.java
Client:Client.java
applicationContext:在src目录下新建applicationContext.xml


本例代码如下:

package com.mollychin.dao;

public interface IUserDao {
    public void add();

}
package com.mollychin.dao.impl;

import com.mollychin.dao.IUserDao;

public class UserDaoImpl implements IUserDao {

    @Override
    public void add() {
        System.out.println("UserDaoImpl add()");
    }
}
package com.mollychin.biz;

public interface IUserBiz {
    public void add();

}
package com.mollychin.biz.impl;

import com.mollychin.biz.IUserBiz;
import com.mollychin.dao.IUserDao;

public class UserBizImpl implements IUserBiz {
    private IUserDao userDao;
    //set方法很重要,Spring容器注入所需
    public void setUserDao(IUserDao userDao) {
        this.userDao = userDao;
    }


    @Override
    public void add() {
        System.out.println("UserBizImpl add()");
        userDao.add();
    }
}
package com.mollychin.client;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.mollychin.biz.IUserBiz;
import com.mollychin.dao.IUserDao;
import com.mollychin.dao.impl.UserDaoImpl;

public class Client {

    public static void main(String[] args) {
        //构建一个应用环境上下文的工厂
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        IUserBiz userBiz = (IUserBiz)context.getBean("ub");
        userBiz.add();
    }
}

<?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="ub" class="com.mollychin.biz.impl.UserBizImpl">
        <!-- userBiz内部的一个属性需要注入一个实现 -->
        <property name="userDao" ref="ud" />
    </bean>
    <bean id="ud" class="com.mollychin.dao.impl.UserDaoImpl"/>
</beans>

将Client.java–>run as Java Application可得到结果:

运行结果


现在的你对IOC有了初步的体验了吧,那么你也许会问,Spring会自动帮我们创建几次我们配置在XML文件中的对象呢?一试便知。
在Client.java加上几行代码:

package com.mollychin.client;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.mollychin.biz.IUserBiz;
import com.mollychin.dao.IUserDao;
import com.mollychin.dao.impl.UserDaoImpl;

public class Client {

    public static void main(String[] args) {
        //构建一个应用环境上下文的工厂
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        IUserBiz userBiz = (IUserBiz)context.getBean("ub");
        userBiz.add();
        IUserBiz userBiz2 = (IUserBiz)context.getBean("ub");
        System.out.println(userBiz==userBiz2);//true
    }
}

然后运行Client.java文件,您会发现:
单例singleton
哈哈,可见SpringBean的配置为单例(Singleton)
Bean的作用域可以通过Bean标签的scope属性进行设置,Bean的作用域包括:
默认情况下scope=”singleton”,那么该Bean是单例,任何人获取该Bean实例的都为同一个实例;
scope=”prototype”,任何一个实例都是新的实例;
scope=”request”,在WEB应用程序中,每一个实例的作用域都为request范围;
scope=”session”,在WEB应用程序中,每一个实例的作用域都为session范围;


下面呢,我们来使用静态工厂和非静态工厂的方式创建userDao,然后给userBiz内部的属性注入该实现。
1.非静态:


package com.mollychin.factory;

import com.mollychin.dao.IUserDao;
import com.mollychin.dao.impl.UserDaoImpl;

public class UserDaoStaticFactory {
public static IUserDao createfactory(){
return new UserDaoImpl();
}
}
在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 id="ub" class="com.mollychin.biz.impl.UserBizImpl">
        <!-- userBiz内部的一个属性需要注入一个实现 -->
        <property name="userDao" ref="ud3" />
    </bean>
    <bean id="ud" class="com.mollychin.dao.impl.UserDaoImpl" /> 
    <!-- 实例工厂:先有工厂的实例对象,通过实例对象创建对象,提供所有的方法都是非静态的 -->
    <bean id="udf" class="com.mollychin.factory.UserDaoFactory" />
    <bean id="ud3" factory-bean="udf" factory-method="createUserDao" />
</beans>
package com.mollychin.factory;

import com.mollychin.dao.IUserDao;
import com.mollychin.dao.impl.UserDaoImpl;
/*
 * 工厂实例的方式,即首先要有工厂对象
 */
public class UserDaoFactory {
    public    IUserDao createUserDao(){
        return  new UserDaoImpl();
    }
}

2.静态

package com.mollychin.factory;

import com.mollychin.dao.IUserDao;
import com.mollychin.dao.impl.UserDaoImpl;

public class UserDaoStaticFactory {
    public  static IUserDao createfactory(){
        return  new UserDaoImpl();
    }
}
<?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="ub" class="com.mollychin.biz.impl.UserBizImpl">
        <!-- userBiz内部的一个属性需要注入一个实现 -->
        <property name="userDao" ref="ud2" />
    </bean>
    <bean id="ud" class="com.mollychin.dao.impl.UserDaoImpl" /> 
    <!-- 采用静态工厂的方式创建userDao -->
    <bean id="ud2" class="com.mollychin.factory.UserDaoStaticFactory"
        factory-method="createfactory" />

以上两种方式均可以实现IOC这一Spring核心。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值