之前没有记录spring的相关学习笔记,打算现在开始补充这部分内容。今天就来分享下HelloWorld中的Spring的基本用法。
下面先来看我们写的HelloWorld类:
1.HelloWorld的基本语法
public class HelloWorld {
private String name;
public void setName2(String name) {
this.name = name;
}
public void hello() {
System.out.println("hello:"+name);
}
public HelloWorld() {
System.err.println("HelloWorld 的构造器...");
}
}
我们可以看到这构造了一个简单的类HelloWorld,并有一个属性和一个hello()方法,下面我们来写个main方法来运行程序:
public class Main {
public static void main(String[] args) {
HelloWorld helloWorld = new HelloWorld();
helloWorld.setName("zhangtt");
helloWorld.hello();
}
}
运行以下,控制台正常输出:
这就是Spring的HelloWorld的吗?
当然不是,以上的代码其实和Spring还没有任何关系,只是最基本的java程序。那如何利用Spring这个框架来实现我们以上相同的功能效果呢?
2.用Spring框架来实现
(1)安装Spring相关jar包
这里其实就是在我们的开发工具中引入Spring框架,通常我们都是通过maven的方式来引入:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
在pom.xml中引入Spring的core的jar,spring-context-support是为了支持我们ioc容器必须引入的jar。我们可以看到在引入spring的两个核心jar后,我们的IDE中加入了相关的几个jar:
不同版本的spring-core引入的jar也有差别,但是殊途同归。
(2)spring版HelloWorld
一个典型的Spring项目需要创建一个或者多个Bean配置文件,这些配置文件作用在于,在Spring IOC容器里面配置Bean,这些配置文件可以放在classpath下,也可以放在其他目录。
好了,使用spring来完成步骤1中的效果我们不需要再像main()方法中一样创建HelloWorld对象然后给他赋值。我们只需编写一个Bean的配置文件applicationContext.xml,放在classpath下,并添加如下配置:
<bean id="helloWorld" class="com.cn.zhtt.HelloWorld">
<property name="name2" value="springzhtt"></property>
</bean>
这里的id值是需要new出的对象名,对应main()中的helloWorld,class是对象的全类名,property属性标签是为了给你创建的对象赋值,这里其实是用set方式赋值,其中name属性值为name,这意味中HelloWorld中必须有个setName2()方法与之对应,value值即为set方法传入的具体值。通过这个配置文件我们就完成了main()方法中的
HelloWorld helloWorld = new HelloWorld();
helloWorld.setName(“zhangtt”);
这两步。那么问题来了,我们利用sprng的IOC容器创建了对象并赋值,那么我们如何将对象取出来用呢?spring的applicationContext给我们提供了多种方式:
public static void main(String[] args) {
// HelloWorld helloWorld = new HelloWorld();
// helloWorld.setName2("zhangtt");
//创建Spring的IOC容器
ApplicationContext atx = new ClassPathXmlApplicationContext("applicationContext.xml");
//从容器种获取bean
HelloWorld helloWorld =(HelloWorld) atx.getBean("helloWorld");
helloWorld.hello();
System.out.println(helloWorld);
}
这里通过通过配置文件中的id,调用容器的getBean()方法精确的拿到容器给我们创建的对象。
最后我们还要注意一点:我在HelloWorld的构造器中输出了一段代码,并再从容器中拿到Bean后输出了这个Bean,我们先来看看运行结果:
这里不光正确的打印了我们想要的"hello:springzhtt”而且在这之前还打印了我们在HelloWorld的构造器中写入的一段话,这说明spring容器在创建对象时调用了Bean的无参构造器(其实是根据XML中配置的Bean的全类名,通过反射的方式在IOC容器中创建了Bean),所以当类中不写构造器时可以(有默认的无参构造器),写了构造器的话就必须包含一个无参的构造器否则容器是无法帮我们生成对象的哦。
今天就分享到这,后续会持续更新Spring的相关内容。。。