学习Spring第一天
在xml中装载Bean实体
首先新建一个实体类 HelloWorld.java
public class HelloWorld{
private String name;
public void setName(String name){
this.name = name;
}
public void printHello(){
System.out.println("Spring 4: Hello!" + name);
}
}
一个实体类就创建完成了,接下来我们在xml中注册这个实体类.
在resources文件夹下创建applicationContext.xml
代码结构如上,我们在xml中配置beans.
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">
<bean id="helloBean" class="com.demo.Entity.HelloWorld">
<property name="name" value="RenBuRuGu"/>
</bean>
</beans>
其中id为bean的唯一编号,每一个实体类都需要注册成一个bean。class为对应的entity,property为属性值,对应着HelloWorld里的name,spring会根据setName函数自动为name赋值.
完成了这一步之后,下面我们来编写一个测试函数调用一下.
在com.demo根目录下创建App.java.
public class App {
public static void main(String[] args){
ApplicationContext context = new ClassPathXmlApplicationContext("application.xml");
HelloWorld helloWorld = context.getBean("helloBean");
helloWorld.printHello();
}
}
我们通过ClassPathXmlApplicationContext获取xml的bean实体,然后通过Spring的IOC从容器中获取HelloWorld.
运行结果如下.
Spring的松耦合机制
下面为大家介绍一下Spring的松耦合机制.
项目结构如下:
如果我们想实现一个可以用Csv和Json格式输出的功能,稍微有点经验的java程序员可能会把输出功能抽象成一个接口然后分别实现.
先创建一个输出功能的interface
public interface IOutputGenerator{
void generateOutput();
}
然后我们创建两个类分别去实现这个接口.
CsvOutputGenerator
public class CsvOutputGenerator implements IOutputGenerator {
@Override
public void generateOutput(){
System.out.println("Csv Output Generator");
}
}
JsonOutputGenerator
public class JsonOutputGenerator implements IOutputGenerator {
@Override
public void generateOutput(){
System.out.println("Json Output Generator");
}
}
如果我们想要在业务逻辑代码中使用输出功能,有如下三个方法:
IoutputGenerator output = new CsvOutputGenerator();
output.generateOutput();
这种方式肯定是不好的,如果需求变了或者需要使用新的Generator,必须在所有引用到的地方都手动修改,这种方式的工作量是巨大的.
public class OutputHelper{
private IOutputGenerator output;
public OutputHelper(){
this.output = new CsvOutputGenerator();
}
public generateOutput(){
output.generateOutput();
}
}
当我们需要使用的时候直接调用OutputHelper就可以了.
OutputHelper helper = new OutputHelper();
helper.generateOutput();
这种方法比第一种好,当需求改变时(比如从csv变成json),我们只需要在OutputHelper里手动修改就好了.
第三种方法是用Spring的松耦合机制.
我们先在xml中配置bean.
Spring-common.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">
<bean id="outputHelper" class="com.demo.Helper.OutputHelper">
<property name="outputGenerator" ref="csvOutputGenerator"/>
</bean>
<bean id="csvOutputGenerator" class="com.demo.Generator.CsvOutputGenerator"/>
<bean id="jsonOutputGenerator" class="com.demo.Generator.JsonOutputGenerator"/>
</beans>
OutputHelper
public class OutputHelper {
private IOutputGenerator outputGenerator;
public void setOutputGenerator(IOutputGenerator outputGenerator) {
this.outputGenerator = outputGenerator;
}
public void generatorOutput() {
outputGenerator.generateOutput();
}
}
我们现在可以这么使用它:
public class App {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("Spring-common.xml");
OutputHelper outputHelper = (OutputHelper) context.getBean("outputHelper");
outputHelper.generatorOutput();
}
}