??Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。??-----转自百度百科
??简单来说,Spring 是一个分层的 JavaSE/EEfull-stack(一站式) 轻量级开源框架。
降低 JavaEE API 的使用难度
Spring 对 JavaEE 开发中非常难用的一些 API(JDBC、JavaMail、远程调用等),都提供了封装,
使这些 API 应用难度大大降低
2.aop:面向切面编程(拓展功能不通过修改源代码实现)
(1)通过无参构造方法创建
?Spring可以通过类的无参构造来创建bean
①首先创建一个Bean1.java
package com.spring.test_1;
public class Bean1 {
public void test()
{
System.out.print("test bean...");
}
}
②然后在idea创建的spring-config.xml中做如下配置,这里id是用来获取配置对象的,class是类的路径。
注意:spring核心配置文件名称和位置不是固定的,建议放到src下面,官方建议applicationContext.xml
<bean id="bean1" class="Bean1"></bean>
这里要引入schema约束,否则会在之后加载配置文件时会出现错误提示,在联网的情况下,idea会自动帮你导入,无网络的话,也可以自己手动导入,这里不再详解。
③写代码测试对象创建
@Test
public void fun1() {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-config.xml");
Bean1 bean1 = (Bean1) applicationContext.getBean("bean1");
bean1.test();
}
注意:如果类中没有无参构造的话会抛出异常(No default constructor found)
测试结果如下:
(2)通过静态工厂创建
①创建静态方法,返回类对象
package com.spring.test_1;
public class Bean2Factory {
public static Bean2 getBean2()
{
return new Bean2();
}
}
②使用静态工厂创建对象
<bean id="bean2" class="com.spring.test_1.Bean2Factory" factory-method="getBean2"></bean>
③测试用例
@Test
public void fun2() {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-config.xml");
Bean2 bean2 = (Bean2) applicationContext.getBean("bean2");
bean2.test2();
}
测试结果:
(3)通过实例工厂创建
①创建不是静态的方法,返回类对象
package com.spring.test_1;
public class Bean3Factory {
public Bean3 getBean3()
{
return new Bean3();
}
}
②使用实例工厂创建对象
<!-- 使用实例工厂创建对象 -->
<!-- 创建工厂对象 -->
<bean id="bean3Factory" class="com.spring.test_1.Bean3Factory"></bean>
<bean id="bean3" factory-bean="bean3Factory" factory-method="getBean3"></bean>
测试用例:
@Test
public void fun3() {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-config.xml");
Bean3 bean3 = (Bean3) applicationContext.getBean("bean3");
bean3.test3();
}
测试结果:
(1)id属性:起名称,id属性值名称任意命名
(2)class属性:创建对象所在类的全路径
(3)name属性:功能和id属性一样的,id属性值不能包含特殊符号,但是在name属性值里面可以包含特殊符号
(4)scope属性
singleton:默认值,单例,创建的对象在系统中只有一份
<bean id="bean1" class="Bean1" scope="singleton"></bean>
测试用例:
@Test
public void fun4() {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-config.xml");
Bean1 bean1 = (Bean1) applicationContext.getBean("bean1");
Bean1 bean2 = (Bean1) applicationContext.getBean("bean1");
System.out.println(bean1);
System.out.println(bean2);
}
测试结果:
prototype:多例,每一次创建都对应一个新的对象
bean id="bean1" class="com.spring.test_1.Bean1" scope="prototype"></bean>
测试结果:globalSession:创建对象把对象放到globalSession里面
https://github.com/LELE-QAQ/TestSpring
原文:https://www.cnblogs.com/le-le/p/10498605.html