`
Luob.
  • 浏览: 1589890 次
  • 来自: 上海
社区版块
存档分类
最新评论

spring 第3天使用java类和XML配置bean

阅读更多
下面采用java类来配置bean,前面都采用xml进行配置bean
package cn.sh.springmvc.model;

import cn.sh.springmvc.model.interfaces.Axe;
import cn.sh.springmvc.model.interfaces.Person;

public class Chinese implements Person {
	private Axe axe;
	private String name;
	public Chinese() {
		System.out.println("Spring 实例化");
	}
	@Override
	public void useAxe() {
		System.out.println(axe.chop());
	}
	public void setAxe(Axe axe) {
		this.axe = axe;
	}
	public Axe getAxe() {
		return axe;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}

采用xml
<bean id="stoneAxe" class="cn.sh.springmvc.model.StoneAxe">
		<property name="name" value="没有打磨的"/>
	</bean>
	<bean id="steelAxe" class="cn.sh.springmvc.model.SteelAxe"/>
	<!-- 第二阶段 -->
	<bean id="chinese" class="cn.sh.springmvc.model.Chinese">
<property name="axe" ref="stoneAxe"/>
		<property name="name" ref="刘诗诗"/>
</bean>

采用java类来配置bean

package cn.sh.springmvc_java;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.DependsOn;
import org.springframework.context.annotation.ImportResource;

import cn.sh.springmvc.model.SteelAxe;
import cn.sh.springmvc.model.StoneAxe;
import cn.sh.springmvc.model.interfaces.Axe;
import cn.sh.springmvc.model.interfaces.Person;

/**
 * 使用一个特殊的 配置类.来代替XML的配置
 * @author Bin
 */

/*
 * @Configuration  用于修饰一个Java类 为配置类
 * @Bean:修饰一个方法,将该方法的返回值,定义成容器中的一个bean;
 * @Value:修饰一个filed,用于给该字段 赋值
 * @import:修饰一个Java配置类,用于向当前配置类中导入其他 Java配置类
 * @Scope:修饰一个方法,定义该方法返回的Bean的生命域
 * @Lazy:修饰一个方法,指定该方法返回的对应Bean是否需要延迟初始化
 * @DepondOn:修饰一个方法,指定在初始化对应方法返回Bean之前,初始化指定Bean
 * 
 */
@Configuration //用于修饰一个Java配置类
@ImportResource("classpath*:/applicationContent.xml") //可以看出来采用 XML 和 Java配置类混合,并一 Java配置类为"主"
public class AppConfig {
	
	@Value("孙悟空")
	String personName;
	
	public Person person(){
		Chinese p=new Chinese();
		p.setAxe(stoneAxe());
		p.setName(personName);
		return p;
	}
	
	@Bean(name="stoneAxe")
	@DependsOn("steelAxe")
	public Axe stoneAxe(){
		return new StoneAxe();
	}
	
	@Bean(name="steelAxe")
	public Axe steelAxe(){
		System.out.println("create SteelAxe");
		return new SteelAxe();
	}
	
}

	@Test
	public void test11(){ //采用Java配置类,来管理 依赖关系, 同时可以采用 XML 和 Java配置类混合
		ApplicationContext act=new AnnotationConfigApplicationContext(AppConfig.class);
		StoneAxe saxe=act.getBean("stoneAxe",StoneAxe.class);
		System.out.println(saxe.chop());
		Chinese c=act.getBean("chinese",Chinese.class);
		c.test();
	}


使用静态工厂方法创建bean
package cn.sh.springmvc_java.factory;

import cn.sh.springmvc.model.SteelAxe;
import cn.sh.springmvc.model.StoneAxe;
import cn.sh.springmvc.model.interfaces.Axe;

/**
 * 使用静态工厂类,创建 Bean
 *
 */
public class AxeFactory {

	public static Axe getAxe(String arg){
		if(arg.equals("stone")){
			return new StoneAxe();
		}else if(arg.equals("steel")){
			return new SteelAxe();
		}
		return null;
	}
}

 <!-- 使用静态工厂staticFactory 创建Bean
      	1:不需要为工厂类配置bean
      	2:可以直接使用 class来指定 工厂类
       -->
      <bean id="stoneAxe_sf" class="cn.sh.springmvc_java.factory.AxeFactory" factory-method="getAxe" >
      		<constructor-arg value="stone"/>
      		<property name="name" value="小石头"/>
      </bean>
      
      <bean id="steelAxe_sf" class="cn.sh.springmvc_java.factory.AxeFactory" factory-method="getAxe" >
      		<constructor-arg value="steel"/>
      		<property name="name" value="不锈钢"/>
      </bean>


采用实例工厂方法创建bean
package cn.sh.springmvc_java.factory;

import cn.sh.springmvc_java.American;
import cn.sh.springmvc_java.China;
import cn.sh.springmvc_java.People;

/**
 * 使用实例工厂创建bean
 *
 */
public class PeopleFactory {

	public People getPeople(String type){
		if(type.equalsIgnoreCase("chin")){
			return new China();
		}else{
			return new American();
		}
	}
}

 <!-- 使用 实例工厂 创建Bean
      	1:必须将工厂配置成一个Bean,因为 工厂需要实例化
      	2:必须使用 factory-bean 指定 工厂bean
       -->
      <bean id="peopleFactory" class="cn.sh.springmvc_java.factory.PeopleFactory"/>
      <bean id="china" factory-bean="peopleFactory" factory-method="getPeople">
      	<constructor-arg value="chin"/>
      </bean>
      <bean id="american" factory-bean="peopleFactory" factory-method="getPeople" scope="prototype" init-method="init" destroy-method="close">
      	<constructor-arg value="ame"/>
      </bean>

分享到:
评论

相关推荐

    spring bean XML配置入门

    在本文中,我们将深入探讨Spring框架中的Bean XML配置,这是Spring的核心特性之一,它允许我们定义、管理和装配应用中的对象。我们将围绕以下知识点展开: 1. **Spring框架基础**: Spring是一个开源的Java平台,...

    使用java类配置Bean

    本文将深入探讨"使用java类配置Bean"这一主题,特别是在SIA实战项目中的应用。 首先,让我们理解Spring框架的核心概念——Bean。在Spring中,Bean是应用程序中的对象,由Spring容器管理其生命周期,包括创建、初始...

    IOC之基于Java类的配置Bean

    基于Java类的配置Bean是Spring实现IOC的一种方式,与XML配置相比,提供了更灵活和类型安全的选项。 在Spring中,我们可以通过编写Java类来定义Bean的配置,这种配置方式通常被称为JavaConfig。这种方式的优点在于...

    在非spring注解类中使用spring容器中的bean_普通类中使用yml配置文件中的配置信息

    它提供了强大的依赖注入(DI)机制,使得我们可以方便地管理和使用Bean。然而,在某些情况下,我们可能需要在非Spring注解的类中访问Spring容器中的Bean,或者在这些类中使用YAML配置文件中的配置信息。本篇将详细...

    java *spring工具类 方便在非spring管理环境中获取bean

    java *spring工具类 方便在非spring管理环境中获取beanjava *spring工具类 方便在非spring管理环境中获取beanjava *spring工具类 方便在非spring管理环境中获取beanjava *spring工具类 方便在非spring管理环境中获取...

    SSH三大框架整合 struts2(使用xml配置)+hibernate(使用xml配置)+spring(使用xml配置)

    SSH是Java Web开发中的三个重要框架,分别是Struts2、Hibernate和Spring,它们共同构建了一个强大的MVC(Model-View-Controller)架构。本项目整合了这三个框架,并使用XML配置来管理各个组件,实现了基本的CRUD...

    spring 重新动态加载数据库或xml中的bean,可以不用重启tomcat

    spring 重新动态加载数据库或xml中的bean,可以不用重启tomcat

    Spring-hibernate结合使用全xml配置方式

    Spring框架提供了IoC(Inversion of Control,控制反转)和AOP(Aspect-Oriented Programming,面向切面编程)等核心特性,通过XML配置文件管理Bean的生命周期和依赖关系。Hibernate则是一个强大的ORM框架,能够将...

    Java中Spring获取bean方法小结

    - **通过`@Configuration`和`@ComponentScan`**:Spring 3.0引入了基于Java的配置,允许在Java类中定义Bean并扫描特定包下的组件。 - **使用`Prototype`作用域的Bean**:如果一个Bean是Prototype作用域,每次请求...

    详解Spring中使用xml配置bean的细节

    Spring 框架中使用 XML 配置 Bean 是一种常见的方式,它可以帮助开发者轻松地管理 Bean 的依赖关系和生命周期。在本文中,我们将详细介绍 Spring 中使用 XML 配置 Bean 的细节。 Bean 配置 在 Spring 中,Bean ...

    模拟spring的xml配置文件注入

    这个项目的源码演示了如何使用SAXBuilder解析XML配置,然后模拟Spring的bean管理和依赖注入。通过学习和理解这个示例,你将能够更好地掌握Spring的XML配置原理,以及如何在不使用Spring框架的情况下,自行实现类似的...

    spring配置文件:整理总结Spring中XML配

    本文将详细介绍关于Spring XML配置文件的12个最佳实践,这些实践不仅有助于提高配置文件的可读性和可维护性,还能帮助开发者更好地理解和使用Spring框架。 #### 最佳实践 1. **避免使用自动绑定(Autowiring)** ...

    Spring的Bean配置

    2. **注解配置**:随着Java注解的发展,Spring引入了基于注解的配置,可以直接在类或方法上使用`@Component`,`@Service`,`@Repository`和`@Controller`等注解声明Bean。同时,使用`@Autowired`进行依赖注入。 3. ...

    31. Spring Boot导入XML配置【从零开始学Spring Boot】

    在本篇【从零开始学Spring Boot】系列教程中,我们将深入探讨如何在Spring Boot项目中导入并使用XML配置。Spring Boot以其简化Spring应用的初始搭建以及开发过程而闻名,通常推崇的是Java配置而非XML配置。然而,在...

    Spring装配Bean教程之XML安装配置bean详解

    在Spring框架中,XML配置是早期最常用的配置方式,它提供了详细且灵活的方式来定义和管理Bean的生命周期。本文将深入探讨Spring如何通过XML配置来装配Bean。 首先,要创建XML配置,你需要创建一个新的XML文件,通常...

    普通类调用Spring bean对象

    3. **Spring Java Config**:在现代的Spring应用中,XML配置逐渐被Java配置取代。我们可以创建一个配置类,然后在其中声明bean,使用`@ComponentScan`扫描包含普通类的包,这样Spring就能自动管理普通类。同时,也...

    Spring XML配置的12个技巧

    3. 使用简化格式:Spring XML配置支持简化语法,减少子元素的使用,如将`&lt;value&gt;`和`&lt;ref&gt;`作为属性直接嵌入`&lt;property&gt;`和`&lt;constructor-arg&gt;`标签中。这有助于减少冗余代码,提高配置文件的可读性。 4. 尽量使用`...

    Java获取Spring中配置的Bean的三种方式

    首先,我们需要创建一个`ApplicationContext`实例,这通常通过加载配置文件(如XML或Java配置类)来实现。以下是一个基于XML配置的例子: ```java ClassPathXmlApplicationContext context = new ...

    java spring工具类 方便在非spring管理环境中获取bean

    java spring工具类 方便在非spring管理环境中获取beanjava spring工具类 方便在非spring管理环境中获取beanjava spring工具类 方便在非spring管理环境中获取beanjava spring工具类 方便在非spring管理环境中获取bean...

Global site tag (gtag.js) - Google Analytics