Spring核心思想的简单实现

//准备工作

//==================================================================================================================

package com.ys.service;

import com.ys.model.User;

/*

* @作者 邓聪

* @Description:UserService

* @Date 15:39  2017/9/27

*/

public interface UserService {

public User login(String uname, String pwd);

}

//==================================================================================================================

package com.ys.service.impl;

import com.ys.dao.UserDao;

import com.ys.model.User;

import com.ys.service.UserService;

/*

* @作者 邓聪

* @Description:UserServiceImpl

* @Date 15:33  2017/9/27

*/

public class UserServiceImpl implements UserService{

private UserDao userDao;

//spring 的依赖注入

public void setUserDao(UserDao userDao) {

this.userDao = userDao;

}

@Override

public User login(String uname, String pwd) {

return   userDao.login(uname,pwd);

}

}

//==================================================================================================================

package com.ys.dao;

import com.ys.model.User;

/*

* @作者 邓聪

* @Description:

* @Date 15:58  2017/9/27

*/

public interface UserDao {

User login(String uname, String pwd);

}

//==================================================================================================================

package com.ys.dao.impl;

import com.ys.dao.UserDao;

import com.ys.model.User;

import com.ys.utils.C3P0Utils;

import org.apache.commons.dbutils.QueryRunner;

/*

* @作者 邓聪

* @Description:UserDaoImpl

* @Date 15:38  2017/9/27

*/

public class UserDaoImpl implements UserDao{

private QueryRunner qr=new QueryRunner(C3P0Utils.getDataSource());

@Override

public User login(String uname, String pwd) {

System.out.println("loginSuccess!!..."+"用户名:"+uname+"密码:"+pwd);

return null;

}

}

//======================================华丽的分割线===========================================================================

package com.ys.utils;

import com.ys.dao.UserDao;

import com.ys.dao.impl.UserDaoImpl;

import com.ys.model.User;

import com.ys.service.UserService;

import com.ys.service.impl.UserServiceImpl;

import java.lang.reflect.Method;

/*

* @作者 邓聪

* @Description:控制反转和依赖注入的简单实现

* @Date 15:19  2017/9/27

*/

public class MySpring {

/*

* @作者 邓聪

* @Description:控制反转Ioc

* @Date 15:20  2017/9/27

*/

public static Object getT(String ClassName){

try {

Object obj=Class.forName(ClassName).newInstance();

return obj;

} catch (Exception e) {

e.printStackTrace();

return null;

}

}

//依赖注入的简单实现              被注入对象       注入对象

public static Object zhuru(Object object_1, Object object_2){

try {

//获取接口

Class<?>[] interfaces = object_2.getClass().getInterfaces();

//获取注入对象全限定名,然后获得类名,XxxImpl

String[] split = object_2.getClass().getName().split("\\.");

String nameImpl= split[split.length-1];

//去掉Impl(如果实现类的后缀名长度不为4,那么该方法会出现问题)

String oName= nameImpl.substring(0,nameImpl.length()-4);

//反射获取注入接口引用的方法

Method method = object_1.getClass().getDeclaredMethod("set"+oName,interfaces);

method.invoke(object_1, object_2);

// System.out.println(method.getName());

//返回被注入的对象

return object_1;

} catch (Exception e) {

e.printStackTrace();

return null;

}

}

/*

* @作者 邓聪

* @Description:测试成功

* @Date 15:25  2017/9/27

*/

public static void main(String[] args) {

User user=(User)MySpring.getT("com.ys.model.User");

UserService userService=(UserService) MySpring.getT("com.ys.service.impl.UserServiceImpl");

UserDao userDao=(UserDao) MySpring.getT("com.ys.dao.impl.UserDaoImpl");

UserService us=(UserService) MySpring.zhuru(userService, userDao);

us.login("dengcong","123");

}

}

//打印结果

loginSuccess!!...用户名:dengcong密码:123

//====================Spring整合jUnit4===============================================

package com.ys.utils;/*

* @作者 邓聪

* @Description:包依赖commons-logging.jar spring-core.jar spring-context.jar spring-beans.jar spring-expression.jar spring-

test.jar

*

*

* @Date $time$  $date$

*/

import com.ys.dao.UserDao;

import com.ys.service.UserService;

import org.junit.Test;

import org.junit.runner.RunWith;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.test.context.ContextConfiguration;

import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)//表示整合JUnit4进行测试

@ContextConfiguration(locations={"classpath:applicationContext.xml"})//加载spring配置文件

public class XTest {

@Autowired //自动注入

private UserService userService;

//  @Autowired //自动注入

//  private UserDao userDaoImpl;

@Test

public void test1(){

userService.login("dengcong","123");

}

}

//打印结果

loginSuccess!!...用户名:dengcong密码:123

//==当然,使用注解配合包扫描实现对象的自动创建和属性的注入可以让代码看起来简洁======

appcationContext.xml下beans中配置包扫描

<context:component-scan base-package="com.ys.dao,com.ys.service"></context:component-scan>

//=====然后包中创建类时配置注解=============================================

package com.ys.service.impl;

import com.ys.dao.UserDao;

import com.ys.model.User;

import com.ys.service.UserService;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Component;

/*

* @作者 邓聪

* @Description:配置组件注解@Component("userService"),同时注入userDao

* @Date 15:33  2017/9/27

*/

@Component("userService")

public class UserServiceImpl implements UserService{

@Autowired

private UserDao userDao;

//spring 的依赖注入,配置Autowired注解时,不用写这段代码

//    public void setUserDao(UserDao userDao) {

//        this.userDao = userDao;

//    }

@Override

public User login(String uname, String pwd) {

return   userDao.login(uname,pwd);

}

}

//===============================================

package com.ys.dao.impl;

import com.ys.dao.UserDao;

import com.ys.model.User;

import com.ys.utils.C3P0Utils;

import org.apache.commons.dbutils.QueryRunner;

import org.springframework.stereotype.Component;

/*

* @作者 邓聪

* @Description:配置组件注解@Component("userDao")

* @Date 15:38  2017/9/27

*/

@Component("userDao")

public class UserDaoImpl implements UserDao{

private QueryRunner qr=new QueryRunner(C3P0Utils.getDataSource());

@Override

public User login(String uname, String pwd) {

System.out.println("loginSuccess!!..."+"用户名:"+uname+"密码:"+pwd);

return null;

}

}

时间: 2024-10-10 21:58:06

Spring核心思想的简单实现的相关文章

Spring学习笔记一(Spring核心思想)

通过学习<Spring in action (Third edition)>的第一章,我大概了解了Spring的基本思想: 1,依赖注入(Dependnecy Injection): 在不使用Spring框架的情况下,一个类要跟另一个类建立联系,可能会使用如下的模式: class A{...} class B{ private A a; ...       } 这样的话,每次实例化一个B的对象,如b1,必定实例化一个A的对象,如a1,并且b1和a1是紧耦合的,b1牢牢地和a1绑定在一起了.他们

Spring核心思想:IOC(控制反转)、DI(依赖注入)和AOP(面向切面编程)

Spring有三大核心思想,分别是控制反转(IOC,Inversion Of Controller),依赖注入(DI,Dependency Injection)和面向切面编程(AOP,Aspect Oriented Programming). 控制反转(IOC,Inversion Of Controller) 控制反转不是什么技术,而是一种设计思想.在Java开发中,IOC意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制. 传统正转 控制有反转,当然也就有原来的正转.正转就

Spring核心思想之IOC总结

说到Spring的核心思想Ioc和aop不是Spring提出来的,在Spring之前就已经存在,只不过更偏向理论化,Spring在技术层次把两个思想做了非常好的实现(java) 第一部分:什么是IOCIOC Inversion of Control (控制反转/反转控制),注意它是?个技术思想,不是?个技术实现描述的事情:Java开发领域对象的创建,管理的问题传统开发?式:?如类A依赖于类B,往往会在类A中new?个B的对象 IoC思想下开发?式:我们不???去new对象了,?是由IoC容器(S

Spring核心思想--六大模块介绍

Spring核心容器(Core Spring container) 容器是Spring框架最核心的部分,它管理着Spring应用中bean的创建.配置和管理.在该模块中,包括了Spring bean工厂,它为Spring提供了DI的功能.基于bean工厂,我们还会发现有多种Spring应用上下文的实现.还提供了许多企业服务. 所有的Spring模块都构建于核心容器之上. 面向切面编程(AOP) Spring对面向切面编程提供了丰富的支持.这个模块是Spring应用系统中开发切面的基础,与DI一样

Spring核心思想之AOP总结

AOP在百度百科的解释意为:面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型.利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率. 第一部分:什么是AOP AOP: Aspect oriented Programming ?向切?编程/?向??编程AOP是OOP(面向对象编程)的延续

Spring核心学习(6)引用ApplicationContext-包装Bean的初始化过程,对应用透明

前导:开始学习Spring核心思想,通过一个山寨精简版Spring代码结合学习. 这是IOC的最终版本,在这里我们将BeanFactory包装了起来,让流程能真正的像Spring那样简单.我们新定义了一个接口去继承BeanFactory,然后通过组合的方式将AbstractBeanFactory添加进来,最后的ClassPathXmlApplicationContext类将真正的把Bean的建立,组装都完成. IOC的收获:框架开发思想:在代码实现中,配置和逻辑要有明确的分水岭:1. XML=>

Spring核心学习(1)实现基本的容器-包括注入和获取功能

前导:开始学习Spring核心思想,通过一个山寨精简版Spriing代码结合学习. 内容:1. BeanDefinition-保存Bean及配置信息 2. BeanFactory-对Bean进行管理. BeanDefinition: public class BeanDefinition { private Object bean; public BeanDefinition(Object object) { this.bean = object; } public Object getBean

第一章 spring核心概念

一.Spring作用:管理项目中各种业务Bean(service类.Dao类.Action类),实例化类,属性赋值 二.Spring IOC(Inversion of Control )控制反转,也被称为依赖注入(Dependency Injection[DI]),是面向对象编程 中的一种设计理念,用来减轻程序代码之间的耦合度. IOC原理:侧重原理 在业务代码中不使用我们之间司空见惯的关键字new来构建一个业务实例,而是在配置文件中.通过xml节点来告知容器如何对内存中构建的对应类型的对象名称

Spring核心学习(4)从XML中读取BeanDefinition-将代码变成配置

前导:开始学习Spring核心思想,通过一个山寨精简版Spring代码结合学习. 内容:1. BeanDefinitionReader-配置读取者. 2. XmlBeanDefinitionReader-从XML中读取配置. 3. Resource-定位资源文件.这次将Bean的配置信息都放到了XML里,所以这里会有一个XML文件的读取,我们通过XmlBeanDefinitionReader将XML中的信息组装好成BeanDefinition放到一个Map里,这样我们就能真正做到像Spring那