java-spring个人总结(一) 简述概念_入门

简述


声明:

以下内容综合个人理解,如有歧义,麻烦帮忙指出,共同学习,查漏补缺

------------------------------------------------------------------------------------------------------------------------

Spring简述:

spring是分层的、也是属于一站式、轻量级的开源框架(相对于EJB)
分层、一站式:它可以提供从客户端到后端的一套体系,也可以分开与现有主流框架整合、兼容。
  轻量级:并不依赖于其他的API和容器,相对于一些需要集成一堆API和依赖容器的框架而言是轻量的。
对事务的支持:通过切面编程,仅需配置就可以实现。
对一些API封装:例如邮件mail,远程调度。

spring容器:

spring框架对对象的处理是使用的最多的一个方式,也就是依赖注入(DI)与切面编程(AOP),两点也是其核心思想部分了。

可能还有人提及到控制反转(IoC),其实我认为不需要纠结。它们的含义可以是包含的,都是不由调用者来创建对象。


<1>依赖注入:将创建对象交给spring来处理,并将对象通过get/构造注入到指定的对象内

<2>控制反转:将创建对象交给其他容器或工厂处理

这里推荐一个依赖注入和控制反转详解比较清晰的网站:http://zhangjunhd.blog.51cto.com/113473/126530/


模拟Ioc

究竟Ioc是怎么实现的呢,这里利用xml结合代码模拟

以UserDao为例,使用spring.xml   ---beans的约束

xml






UserDao代码

public class UserDao {
 
       publicUserDao() {
       }
       publicstatic void sha(){
              System.out.println("555");
       }
}


 

模拟工厂类

//工厂类
public class BeanFactory {
//使用一个全家的map的保存我们new出来的对象
private static MapbeanMap = new HashMap();
//解析spring.xml文件
static{
SAXReader sax = new SAXReader();
try {
//读取xml配置文件
Document read =sax.read(BeanFactory.class.getResourceAsStream("/spring.xml"));
//获取根标签
Element rootElement =read.getRootElement();
//再获取子标签
List elements =rootElement.elements();
//迭代子标签
for (Element element : elements) {
String id = element.attributeValue("id");
String className =element.attributeValue("class");
//通过反射技术生成对象
Object obj =Class.forName(className).newInstance();
//再把生成的对象放入map中
beanMap.put(id, obj);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//返回通用对象
public static Object getBean(String id){
return beanMap.get(id);
}


 

First Demo

jar包获取:http://spring.io

相应maven获取 :maven.org

 

这里使用jar包:

基本包

java-spring个人总结(一) 简述概念_入门_第1张图片

其他包

java-spring个人总结(一) 简述概念_入门_第2张图片

不放会出现以下异常:

NoClassDeFoundError (没有导入日志包)

1、 准备javaBean

//这个就是JavaBean
public class User {
 
}

2、准备spring的核心配置文件

位置:建议放在src下
名称:建议 applicationContext.xml




    
 

3、测试

//入门程序
public class Demo1 {
@Test
public void test1(){
//1、读取配置文件
ApplicationContext context  = new ClassPathXmlApplicationContext("/applicationContext.xml");
//2、获取JavaBean,传入的参数是我们定义的额JavaBean的id。
User bean = (User)context.getBean("u1");
//3、输出JavaBean
System.out.println(bean);
}
}

现在的核心API

ApplicationContext: 接口
*ClassPathXmlApplicationContext 类,读取类路径的配置文件【推荐】
*FileSystemXmlApplicationContext 类,读取文件系统的配置文件
public void test2(){
//1、读取类路径的配置文件
/*ApplicationContext context  = new ClassPathXmlApplicationContext("/applicationContext.xml");

//2、读取文件系统的配置文件
//2.1 相对路径 . ..  这个. 代表当前项目,可以省略
//ApplicationContext context  = new FileSystemXmlApplicationContext("./src/applicationContext.xml");}




原有的API

(BeanFactory工厂是Spring框架早期的创建Bean对象的工厂接口)使用BeanFactory接口也可以获取到Bean对象
public void run(){
BeanFactory factory = new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));
UserService us = (UserService) factory.getBean("us");
us.sayHello();
}

BeanFactory和ApplicationContext的区别

* BeanFactory -- BeanFactory采取延迟加载,第一次getBean时才会初始化Bean
* ApplicationContext -- 在加载applicationContext.xml时候就会创建具体的Bean对象的实例,还提供了一些其他的功能
额外功能
* 事件传递
* Bean自动装配
* 各种不同应用层的Context实现





你可能感兴趣的:(spring)