您当前的位置: 首页 >  spring

Charge8

暂无认证

  • 2浏览

    0关注

    447博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Spring 入门使用和getBean方法的三种方式

Charge8 发布时间:2018-08-22 22:24:43 ,浏览量:2

一. 什么是Spring

    Spring 框架是一个开源的 Java平台,它最初是由 Rod Johnson编写的,并且于 2003 年 6 月首次在 Apache 2.0 许可下发布。

    Spring 是轻量级的 Java开发框架,Spring 的核心是控制反转(IoC)和面向切面(AOP)。

    简单来说:Spring是一个轻量级的DI/IoC和AOP容器的开源框架,致力于构建轻量级的JavaEE应用,简化应用开发。

    Spring 官网:https://spring.io/projects/spring-framework

1、 为什么说Spring是一个一站式的轻量级开源框架呢?

    首先轻量级:不是指Spring框架的模块少,数量很轻,而是指Spring框架的非侵入性,即对象可以不必依赖Spring的API类

    其次,JavaEE开发可分成三层架构,针对JavaEE的三层结构,每一层Spring都提供了不同的解决技术。

  • WEB层:SpringMVC
  • 业务层:Spring的IoC
  • 持久层:Spring的JDBCTemplate (Spring的JDBC模板,ORM模板用于整合其他的持久层框架)

    Spring提供了JavaEE每一层的解决方案,所以也说Spring是JavaEE的全栈式(full stack)框架。

2.、Spring的优点:

  • 方便解耦,简化开发。

       Spring就是一个大工厂,可以将所有对象的创建和依赖关系的维护,交给Spring管理。

  • AOP编程的支持

       Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能。

  • 声明式事务的支持

       只需要通过配置就可以完成对事务的管理,而无须手动编程。

  • 方便程序的测试

       Spring对Junit4支持,可以通过注解方便的测试Spring程序。

  • 方便集成各种优秀的框架

       Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如:Struts2/Hibernate/MyBatis/Quartz等)的直接支持。

  • 降低JavaEE API的使用难度

       Spring对JavaEE开发中非常难用的一些API(JDBC、JavaMail、远程调用等)都提供了封装,使这些API应用难度大大降低。

  • Java 源码是经典学习范例

    Spring的源码设计精妙、结构清晰、匠心独运,处处体现着大师对Java设计模式灵活运用以及对Java技术的高深造诣Spring框架源码无疑是Java技术的最佳实践范例。如果想在短时间内迅速提高自己的Java技术水平和应用开发水平,学习和研究Spring源码将会使你收到意想不到的效果。

3、Spring框架的组成结构图:

        

核心容器

     核心容器由 spring-core,spring-beans,spring-context 和 spring-expression(SpEL,Spring表达式语言,Spring Expression Language)等模块组成,它们的细节如下:

  • spring-core:提供了框架的基本组成部分,包括 IoC 和依赖注入功能。

  • spring-beans:提供 BeanFactory,工厂模式的微妙实现,它移除了编码式单例的需要,并且可以把配置和依赖从实际编码逻辑中解耦。

  • spring-context:模块建立在由core和 beans 模块的基础上建立起来的,它以一种类似于JNDI注册的方式访问对象。Context模块继承自Bean模块,并且添加了国际化(比如,使用资源束)、事件传播、资源加载和透明地创建上下文(比如,通过Servelet容器)等功能

  • spring-expression:提供了强大的表达式语言,用于在运行时查询和操作对象图。它是JSP2.1规范中定义的统一表达式语言的扩展,支持set和get属性值、属性赋值、方法调用、访问数组集合及索引的内容、逻辑算术运算、命名变量、通过名字从Spring IoC容器检索对象,还支持列表的投影、选择以及聚合等。
  二. Spring 入门案例:

1、创建 maven项目,引入依赖

     引入Spring的核心jar包外,还要引入 Spring支持的日志Jar包: log4j 和 commons-logging 。

	
		
			org.springframework
			spring-context
			5.0.8.RELEASE
		
		
		
			commons-logging
			commons-logging
			1.2
		
		
                        log4j
                        log4j
                        1.2.17
                
	

      

2、创建一个 model 类

public class User {
	private int id;
	private String username;
	private String password;
    ... getter/setter
}

3、创建 Spring的核心配置文件 applicationContext.xml

      核心配置文件的名称和位置没有固定要求,官方建议写成 applicationContext.xml ,放到classpath下。

每个 bean 可定义的属性:

属性描述class这个属性是强制性的,并且指定用来创建 bean 的 bean 类。name这个属性指定唯一的 bean 标识符。在基于 XML 的配置元数据中,你可以使用 ID 和/或 name 属性来指定 bean 标识符。scope这个属性指定由特定的 bean 定义创建的对象的作用域,它将会在 bean 作用域的章节中进行讨论。constructor-arg它是用来注入依赖关系的,并会在接下来的章节中进行讨论。properties它是用来注入依赖关系的,并会在接下来的章节中进行讨论。autowiring mode它是用来注入依赖关系的,并会在接下来的章节中进行讨论。lazy-initialization mode延迟初始化的 bean 告诉 IoC 容器在它第一次被请求时,而不是在启动时去创建一个 bean 实例。initialization 方法在 bean 的所有必需的属性被容器设置之后,调用回调方法。它将会在 bean 的生命周期章节中进行讨论。destruction 方法当包含该 bean 的容器被销毁时,使用回调方法。它将会在 bean 的生命周期章节中进行讨论。


	
        
	
		
		
	

4、测试类

    从IoC容器中获取创建好的对象

	public static void main(String[] args) {
		// 1.初始化ioc容器(装对象的容器)
		ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
		
		//2.从容器中获得创建好的对象
		User user = context.getBean("user", User.class);
		System.out.println(user);
	}

------
User [id=0, username=admin, password=null]

 

ClassPathXmlApplicationContext 默认加载classpath路径下的文件,只需指明对应文件的classpath路径下的配置文件名字即可。

FileSystemXmlApplicationContext : 该容器从 XML 文件中加载已被定义的 bean。在这里,你需要提供给构造器 XML 文件的完整路径。

WebXmlApplicationContext:该容器会在一个 web 应用程序的范围内加载在 XML 文件中已被定义的 bean。

面向接口编程:返回 ApplicationContext (实际上ApplicationContext是一个接口), 即 Spring 的 IOC容器:

ConfigurableApplicationContext 子接口, 提供了一些方法 close(), refresh(), 可以让 ApplicationContext 刷新和关闭。

 

从IoC容器中获得创建好的对象,getBean方法的三种方式:

1) 根据bean元素的 id属性获得对象 需要强转类型 , bean的id写错时 会抛出 NoSuchBeanDefinitionException

       User user1 = (User) context.getBean("user");

2.)根据bean元素的 class属性获得对象 要确保同一种类型的bean只能配置一个

        User user2 = context.getBean(User.class);

3.)根据bean元素的 id+class属性 获得对象 要求id和类型一定要匹配正确(推荐使用)

        User user3 = context.getBean("user", User.class);

常见错误:

1)NoSuchBeanDefinitionException:按照 bean名称去获取 bean时,不存在该名称的bean

2)BeanDefinitionParsingException:在 ApplicationContext.xml配置文件中,有多个bean元素的id名称相同

3)NoUniqueBeanDefinitionException:按照 class属性去获取bean时,找到了两个,期望只能是一个

 

ends ~

关注
打赏
1664721914
查看更多评论
立即登录/注册

微信扫码登录

0.0385s