`
云上太阳
  • 浏览: 131339 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Spring IOC 原理 ,Java 反射实例,自定义注解

阅读更多

Spring IOC 原理 和 Java 反射实例

                                                                                                        ——我一直不太信任自己的记忆力,所以我把它们都写下来

        

       自从接触了Spring的各种思想后,真的是被各种设计征服了,当然Spring的各种设计基本上都需要扎实的java基础支持;比如SpringIOC(依赖注入,bean管理思想)运用到了Java注解、反射、xml等等。下面用一个实例来说明SpringIOC的原理。

 

 

       在SpringMVC项目中,对DAO和service一般都是spring注解管理的,像@Service,@Respository,@Component等。项目用Maven管理,文章末尾有svn地址和下载地址,代码里只要稍微有点晦涩的地方都有注释,有java经验的应该都能看懂。下面是项目结构图

 


 

 

 

 

 

 

 

 

 

 

 

 

 

 

anntation包下面是对@Resource,@Respository,@Service 的注解实现类;util包下面是java反射的相关类,dao和service包见文思意。测试入口在src/test/java下面。

 

 

MySpring.class 是主要的逻辑类,模拟了SpringIOC的ApplicationContext,所有的注册过的bean都可以从这里获得。完整的类如下

package com.albert.AnnotationTest;

import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.junit.Test;

import com.albert.AnnotationTest.annotation.Resource;
import com.albert.AnnotationTest.annotation.Respository;
import com.albert.AnnotationTest.annotation.Service;
import com.albert.AnnotationTest.dao.MyDao;
import com.albert.AnnotationTest.service.MyService;
import com.albert.AnnotationTest.util.AlbertUtil;
import com.albert.AnnotationTest.util.ClassByPackage;

/**
 * @author albert
 * 这个类模拟Spring ioc 和mvc
 * 所有注解过的bean都从这里取得
 * 
 */
public class MySpring {
	/**
	 * 模拟Spring扫描的注解包
	 */
	private final static String packageName = "com.albert.AnnotationTest";
	/**
	 * 存放注解的bean对象
	 */
	private static Map<String,Object> beanMap = new HashMap<String, Object>();
	static{
		try {
			packageToScan();
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 根据beanName从容器获取bean对象
	 * @param beanName
	 * @return
	 */
	public static Object getBean(String beanName){
		Object obj = null;
		obj = beanMap.get(beanName);
		return obj;
	}
	
	/**
	 * 遍历包中的注解类
	 * @throws IllegalAccessException 
	 * @throws InstantiationException 
	 */
	private static void packageToScan() throws InstantiationException, IllegalAccessException{
		List<Class> clsList = ClassByPackage.getClasssFromPackage(packageName);
		//先加载dao
		for(Class cls : clsList){
                        //判断类是不是有@Respository注解
			if(cls.isAnnotationPresent(Respository.class)){
				String clsName = AlbertUtil.getBeanName(cls.getName());
				//bean对象存入map
				beanMap.put(clsName, cls.newInstance());
			}
		}
		//加载service,同时对其中@Resource注解的属性进行赋值
		for(Class cls : clsList){
			if( cls.isAnnotationPresent(Service.class)){
				String clsName = cls.getName();
				clsName = clsName.substring(clsName.lastIndexOf(".")+1, clsName.length());
				beanMap.put(AlbertUtil.toLowerCaseFirstOne(clsName), cls.newInstance());
				
				//扫描注解@Resource的属性并赋值
				Field[] field = cls.getDeclaredFields();
				for(Field f : field){
                                        //判断属性是不是有@Resource注解
					if(f.isAnnotationPresent(Resource.class)){
						f.setAccessible(true);
						f.set(beanMap.get(AlbertUtil.getBeanName(cls.getName())), beanMap.get(f.getName()));
					}
				}
			}
		}
	}
	
	
}

 项目SVN地址:http://code.taobao.org/svn/AnnotationTestAlbert/                                                                                

 

 

 

 


 

  • 大小: 65.9 KB
4
2
分享到:
评论
4 楼 zzjmates 2015-12-17  
      
zzjmates 写道
       

3 楼 云上太阳 2015-11-09  
楼下保持队形哈。。。哈哈哈
2 楼 PGKE 2015-11-09  
    
1 楼 zzjmates 2015-11-09  
       

相关推荐

    springIoc实现原理

    **Spring Ioc 实现原理详解** Spring Ioc(Inversion of Control,控制反转)是Spring框架的核心特性之一,它改变了传统应用程序中对象的创建和管理方式。在传统的软件设计中,对象的创建和依赖关系的维护通常由...

    Java反射_Spring IOC

    通过阅读这本书和实践提供的JAVA+Spring示例代码,初学者可以深入理解Java反射的原理和Spring IOC的实际应用,从而提高编程技能,更好地应对复杂的项目需求。在学习过程中,务必理论与实践相结合,加深理解,这样...

    自定义注解得使用,模拟spring通过注解方式创建bean实例

    在Java开发中,Spring框架是广泛使用的IoC(Inversion of Control)和AOP(Aspect Oriented Programming)容器。Spring的注解功能极大地简化了配置,使得开发者可以更专注于业务逻辑。本篇将深入探讨如何自定义注解...

    spring ioc和aop原理流程图(详细)

    Spring 框架是Java开发中的核心框架,它主要由两个关键部分组成:IOC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)。这两个概念是Spring框架的核心特性,极大地简化了企业...

    SpringIOC原理实现

    在这个例子中,我们将通过导入Excel数据来深入理解Spring IOC的工作原理,并探讨如何自定义实现。 1. **控制反转**:在传统的编程模式中,我们经常手动创建和管理对象,但在Spring中,对象的创建、初始化、依赖关系...

    手写SpringIOC注解实现版本

    这个"手写Spring IOC注解实现版本"项目旨在帮助我们深入理解Spring框架的工作原理,通过实际动手实现来增强对IoC容器和注解驱动编程的理解。 在Spring中,IOC意味着应用程序不再直接创建对象,而是将对象的创建和...

    spring IOC反射装载bean

    在这个特定的"spring IOC反射装载bean"的主题中,我们将深入探讨Spring如何通过XML配置文件来加载和管理Bean,并利用Java的反射机制来实例化这些Bean。 首先,Spring容器通过读取XML配置文件来获取Bean的定义。这些...

    Spring IOC Annotation 注入 学习实例

    Annotation注入是Spring IOC的一种实现方式,它利用Java注解替代XML配置来管理Bean的依赖关系,使得代码更加简洁、可读性更强。 在Spring框架中,我们主要关注以下几个关键的注解: 1. `@Component`:这是一个基础...

    Spring的IOC原理

    **Spring的IOC原理详解** **一、IoC理论背景** 在面向对象的软件设计中,对象间的耦合是不可避免的,它们通过相互合作实现业务逻辑。这种耦合就像机械手表中的齿轮,彼此啮合共同完成任务。随着软件系统规模的扩大...

    Java反射、泛型和注解实战之Spring核心注入IOC的实现

    通过这个实战项目,你可以深入理解Java反射、泛型和注解的用法,并且了解到如何利用它们构建一个基本的依赖注入系统,这将有助于你更好地理解和使用Spring框架。同时,这样的实践也有助于提升你的编程技能,使你能够...

    Spring通过注解实现IOC

    Spring框架是Java开发中广泛应用的一个轻量级框架,它的核心特性之一就是依赖注入(Dependency Injection,简称DI),而实现DI的一种重要方式就是通过注解(Annotations)。本文将深入探讨Spring如何利用注解来实现...

    Spring Ioc 注解 依赖注入

    ### Spring IoC与注解依赖注入详解 #### 一、Spring框架简介 Spring框架是由Rod Johnson创建的一个开源项目,最初是为了解决企业级应用开发中的复杂性问题而诞生的。Spring框架的核心特性包括IoC(Inversion of ...

    Java IOC及反射api代码参考实例

    Spring框架通过反射来实例化bean,并根据配置的依赖关系进行注入。例如,当定义了一个带有@Autowired注解的字段时,Spring会利用反射找到合适的依赖并注入到该字段中。 下面是一些关于Java IOC和反射API的关键知识...

    spring ioc思维导图源文件

    下面将详细介绍Spring IOC的基本概念、工作原理以及相关知识点。 **1. Spring IOC基本概念** - **控制反转(IOC)**:传统程序设计中,对象的创建和依赖关系由代码直接控制。而在Spring IOC中,这种控制权被反转,...

    SpringIoc示例代码

    首先,让我们了解一下Spring IOC的基本原理。Spring IOC容器通过XML配置文件或者基于注解的方式,定义了对象的生命周期和依赖关系。开发者不再需要手动创建对象,而是声明对象及其依赖,然后由Spring容器负责实例化...

    spring ioc

    Spring 是一个广泛应用的 Java 应用开发框架,其核心特性之一就是IOC,它极大地简化了软件组件之间的依赖管理。在本文中,我们将深入探讨 Spring IOC 的概念、工作原理以及如何在实际项目中应用。 首先,理解 IOC ...

    spring IOC实现(墨者革离)

    总的来说,这个项目通过实际的编程场景,帮助我们理解和实践Spring的IOC原理,包括依赖注入和XML/注解配置。通过这样的实践,我们可以更好地掌握如何在实际项目中运用Spring框架,提升软件设计的质量和可扩展性。

    Java-Spring-SpringIoC容器-SpringIoC的学习

    在Java Spring框架中,Spring IoC(Inversion of Control,控制反转)是核心特性之一,它使得应用程序的组件之间的依赖关系不再由代码直接管理,而是交由Spring IoC容器负责。这种设计模式降低了代码间的耦合,提高...

    Spring IOC实现原理demo

    在本文中,我们将深入探讨Spring IOC的实现原理,并通过一个简单的示例来展示其工作流程。 首先,我们需要理解什么是控制反转。在传统的编程模式中,程序员手动创建并管理对象,而Spring IOC则将这种控制权反转,由...

Global site tag (gtag.js) - Google Analytics