1.Spring基本框架的概念

 Spring 框架是一个分层架构,由 7 个定义良好的模块组成。Spring模块构建在核心容器之上,核心容器定义创建、配置和管理bean的方式。组成Spring框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现,一个支持DI/IOC和AOP开源的容器框架。

2.特点

DI依赖注入:组件以特定方式接收来自容器的资源注入

IOC控制反转:反转资源获取的方向

AOP面向切面编程

3.使用

(1)定义容器

(2)得到容器

具体的代码实现:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.2.xsd"> <bean id="car1" class="com.hanqi.test.Car">
<property name="carNumber" value="鲁C12345"></property>
</bean>
<bean id="car" class="com.hanqi.test.Car">
<property name="carNumber" value="鲁C14345"></property>
</bean>
<bean id="p1" class="com.hanqi.test.Person">
<constructor-arg name="name" value="张三"></constructor-arg>
<constructor-arg name="age" value="30"></constructor-arg>
<property name="car" ref="car1"></property>
<property name="bankCards">
<list>
<value>123456</value>
<value>456798</value>
<value>233339</value>
</list>
</property>
</bean>
<util:list id="bankCards">
<value>12344</value>
<value>13444</value>
<value>15344</value>
</util:list>
<!-- 使用p标签 -->
<bean id="p2" class="com.hanqi.test.Person"
p:name="李四" p:age="20" p:car-ref="car1" p:bankCards-ref="bankCards"></bean>
<!-- 自动装配
<bean id="p3" class="com.hanqi.test.Person" autowire="byType"></bean>-->
<!-- 自动装配 -->
<bean id="p4" class="com.hanqi.test.Person" autowire="byName" p:name="王五" p:age="30"></bean>
<bean id="p5" parent="p1" p:name="张小三" p:age="18"></bean>
<!-- 定义模板,只能被继承,不能被外部使用 -->
<bean id="m1" class="com.hanqi.test.Person" abstract="true"
p:name="默认名称" p:age="20" p:car-ref="car1" p:bankCards-ref="bankCards"></bean>
<!-- 默认是单例的 -->
<bean id="p6" scope="prototype" parent="m1" p:name="王芳" p:age="38"></bean>
<!-- 加载外部配置文件 -->
<context:property-placeholder location="classpath:person.properties"/> <bean id="p7" class="com.hanqi.test.Person" p:name="${name}" p:age="${age}"></bean>
</beans>

定义的Person类

package com.hanqi.test;

import java.util.List; 

public class Person {

    private String name;
private int age; private List<String> bankCards;
private Car car;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public List<String> getBankCards() {
return bankCards;
}
public void setBankCards(List<String> bankCards) {
this.bankCards = bankCards;
}
public Car getCar() {
return car;
}
public void setCar(Car car) {
this.car = car;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", bankCards=" + bankCards + ", car=" + car + "]";
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
System.out.println("带参数的构造方法Person被实例化了");
}
public Person() {
super();
System.out.println("不带参数的构造方法Person被实例化了");
} }

定义的Car类

package com.hanqi.test;

public class Car {

        private String carNumber;

        public String getCarNumber() {
return carNumber;
} public void setCarNumber(String carNumber) {
this.carNumber = carNumber;
} @Override
public String toString() {
return "Car [carNumber=" + carNumber + "]";
} public Car() {
super(); } public Car(String carNumber) {
super();
this.carNumber = carNumber;
} }

测试类

package com.hanqi.test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestPerson { public static void main(String[] args)
{
// 1 加载容器
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); // 2 从容器中获取对象
Person p1 =(Person)ac.getBean("p1");
System.out.println(p1); Person p2 =(Person)ac.getBean("p2");
System.out.println(p2); // Person p3 =(Person)ac.getBean("p3");
// System.out.println(p3); Person p4 =(Person)ac.getBean("p4");
System.out.println(p4);
// 继承的对象
Person p5 =(Person)ac.getBean("p5");
System.out.println(p5); Person p6 =(Person)ac.getBean("p6");
System.out.println(p6); Person p6_1 =(Person)ac.getBean("p6");
System.out.println(p6_1);
if(p6==p6_1)
{
System.out.println("p6 == p6_1");
}
else
{
System.out.println("p6 !=p6_1");
}
// 模板不能被调用
// Person m1 =(Person)ac.getBean("m1");
// System.out.println(m1); Person p7 =(Person)ac.getBean("p7");
System.out.println(p7);
}
}

Spring基本框架的更多相关文章

  1. Spring MVC篇一、搭建Spring MVC框架

    本项目旨在搭建一个简单的Spring MVC框架,了解Spring MVC的基础配置等内容. 一.项目结构 本项目使用idea intellij创建,配合maven管理.整体的目录结构如图: 其中ja ...

  2. Spring MVC 框架的架包分析,功能作用,优点

    由于刚搭建完一个MVC框架,决定分享一下我搭建过程中学习到的一些东西.我觉得不管你是个初级程序员还是高级程序员抑或是软件架构师,在学习和了解一个框架的时候,首先都应该知道的是这个框架的原理和与其有关j ...

  3. SSH(Struts2+Spring+Hibernate)框架搭建流程<注解的方式创建Bean>

    此篇讲的是MyEclipse9工具提供的支持搭建自加包有代码也是相同:用户登录与注册的例子,表字段只有name,password. SSH,xml方式搭建文章链接地址:http://www.cnblo ...

  4. 从零开始学 Java - 搭建 Spring MVC 框架

    没有什么比一个时代的没落更令人伤感的了 整个社会和人都在追求创新.进步.成长,没有人愿意停步不前,一个个老事物慢慢从我们生活中消失掉真的令人那么伤感么?或者说被取代?我想有些是的,但有些东西其实并不是 ...

  5. Spring+MyBatis框架中sql语句的书写,数据集的传递以及多表关联查询

    在很多Java EE项目中,Spring+MyBatis框架经常被用到,项目搭建在这里不再赘述,现在要将的是如何在项目中书写,增删改查的语句,如何操作数据库,以及后台如何获取数据,如何进行关联查询,以 ...

  6. Spring4.1新特性——Spring缓存框架增强(转)

    目录 Spring4.1新特性——综述 Spring4.1新特性——Spring核心部分及其他 Spring4.1新特性——Spring缓存框架增强 Spring4.1新特性——异步调用和事件机制的异 ...

  7. 手把手Maven搭建SpringMVC+Spring+MyBatis框架(超级详细版)

    手把手Maven搭建SpringMVC+Spring+MyBatis框架(超级详细版) SSM(Spring+SpringMVC+Mybatis),目前较为主流的企业级架构方案.标准的MVC设计模式, ...

  8. Spring Boot 框架@Temporal(TemporalType.DATE)

    使用spring boot框架开发项目时,遇到这样一个问题: 查询pgSQL数据库中表A中某date数据类型的列B,想得到YYYY-MM-DD格式的日期,结果返回的为时间戳(长整型数据). 解决办法: ...

  9. 【WEB】初探Spring MVC框架

    Spring MVC框架算是当下比较流行的Java开源框架.但实话实说,做了几年WEB项目,完全没有SpringMVC实战经验,乃至在某些交流场合下被同行严重鄙视“奥特曼”了.“心塞”的同时,只好默默 ...

随机推荐

  1. [wxWidgets] 1. 安装及"hello world"程序

    关于wxWidgets的优越已经在它的官方网站有所阐述,本文不再赘述. 本系列主要记录学习这个软件包过程中遇到的问题以及心得. 1.  安装 从源码安装虽然大多时候不是一件轻松的过程,但是基于以下两个 ...

  2. gcc警告: warning: dereferencing type-punned pointer will break strict-aliasing rules

    Q: 在高优化级别下,不同类型指针之间的强制类型转换可能会触发以下警告: warning: dereferencing type-punned pointer will break strict-al ...

  3. SQL Server的高级知识

    DataSet的内容介绍,两种单例模式(并发量的考虑),SQL高级中的case语句.连接操作.子查询.派生表 -------------------------------- 1.Case的用法 使用 ...

  4. 查询01_DML锁和DDL锁的处理

    一.摘要 Oracle的手册上关于锁的分类说明如下: 1. DML锁:Date lock.执行DML时保护数据的锁.Row Lock(TX)保护特定行,Table Lock(TM)保护整个表,可以通过 ...

  5. jQuery中attr()、prop()、data()用法及区别

    .attr(),此方法从jq1.0开始一直存在,官方文档写的作用是读/写DOM的attribute值,其实1.6之前有时候是attribute,有时候又是property..prop(),此方法jq1 ...

  6. 如何用 JIRA REST API 创建 Issue

    简介 最近需要把一个Excel里的issues list全部到JIRA上create 一遍, 总不能手动创建百十来个issues吧, 本文讲述一下如果调用JIRA提供的Rest API 来自动创建is ...

  7. iptables删除规则

    查看nat规则: iptables -t nat -nL --line-number 添加规则是-A和-I,-A是添加到末尾,-I是添加到指定位置,默认添加到最前面.删除使用-D,也就是原来“ipta ...

  8. http响应状态码大全

    http响应状态码大全 http状态返回代码 1xx(临时响应)表示临时响应并需要请求者继续执行操作的状态代码. http状态返回代码 代码   说明100   (继续) 请求者应当继续提出请求. 服 ...

  9. logging 日志模块学习

    logging 日志模块,用于记录系统在运行过程中的一些关键信息,以便于对系统的运行状况进行跟踪,所以还是灰常重要滴,下面我就来从入门到放弃的系统学习一下日志既可以在屏幕上显示,又可以在文件中体现. ...

  10. Do things for others

    早上,按照平常的时间去吃早饭,食堂格外的空旷,打饭的员工说今天人很少,我说昨天是有元旦晚会,她说今天是放假,我后来想,还是她说的更有道理.她看的比我清楚更清楚! 幸亏昨晚上记录下了早上要帮别人搜论文的 ...