初学Spring
Spring是当今最流行的框架,今天开始,dayday同学要正式开始学习Spring了,加油
以下是一个简单的应用Spring框架的java程序
src\dayday\HelloSpring.java
package dayday; import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; /**
* Created by I am master on 2016/11/28.
*/
public class HelloSpring {
private String name;
public void setName(String name){
this.name=name;
}
public void println(){
System.out.println("hello "+name+" ,study Spring hard!!!");
}
}
src\dayday\Main.java
package dayday; import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; /**
* Created by I am master on 2016/11/28.
*/
public class Main {
public static void main(String[] args){
//获得Spring容器
ApplicationContext ctx=new ClassPathXmlApplicationContext("beans.xml");
// 获得一个bean,spring中所有的java类都为bean
HelloSpring hellospring=ctx.getBean("hellospring",HelloSpring.class);
//调用类中的方法
hellospring.println();
// 原来不用spring框架的时候,将得到同样的运行结果
HelloSpring hellospring=new HelloSpring();
helloSpring.setName("dayday");
hellospring.println();
} }
src\beans.xml
<?xml version="1.0" encoding="UTF-8"?>
<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.xsd">
//调用反射调用该类的无参构造函数创建一个bean(对象),必须要有包,id为创建bean(类)的名字
//name中的值(String)会相应的调用类中setString()的方法,value表示对应属性的值,也可以是ref,ref中是另外一个bean
<bean id="hellospring" class="dayday.HelloSpring">
<property name="name" value="dayday"/>
</bean>
//另外一种方式,通过p标签进行配置,如果要通过p标签配置的话,bean中不能含有有参构造函数
<!--通过p标签进行配置-->
<bean name="hellospring" class="dayday.HelloSpring" p:name="dayday" p:book-ref="book"/>
<bean name="book" class="dayday.Book" p:bookname="《Spring MVC》"/>
</beans> 运行结果
hello dayday ,study Spring hard!!! <property>中使用ref
src\dayday\HelloSpring.java
package dayday; import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; /**
* Created by I am master on 2016/11/28.
*/
public class HelloSpring {
private Book book;
private String name;
public void setName(String name){
this.name=name;
}
public void setBook(Book book){
this.book=book;
}
public void println(){
System.out.println("hello "+name+" ,study Spring hard!!!"+book.print());
} public static void main(String[] args){
ApplicationContext ctx=new ClassPathXmlApplicationContext("beans.xml");
HelloSpring hellospring=ctx.getBean("hellospring",HelloSpring.class);
hellospring.println();
} }
src\dayday\Book.java
package dayday; /**
* Created by I am master on 2016/11/28.
*/
public class Book {
private String bookname;
public void setBookname(String bookname){
this.bookname=bookname;
}
public String print(){
return "read "+bookname;
}
}
src\dayday\Main.java
package dayday; import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; /**
* Created by I am master on 2016/11/28.
*/
public class Main {
public static void main(String[] args){
ApplicationContext ctx=new ClassPathXmlApplicationContext("beans.xml");
HelloSpring hellospring=ctx.getBean("hellospring",HelloSpring.class);
hellospring.println();
} }
src\dayday\beans.xml
<?xml version="1.0" encoding="UTF-8"?>
<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.xsd">
<bean id="hellospring" class="dayday.HelloSpring">
<property name="name" value="dayday"/>
<property name="book" ref="book"></property>
</bean>
<bean id="book" class="dayday.Book">
<property name="bookname" value="《Spring mvc》"></property>
</bean>
</beans>
通过构造注入,之前的都为设值注入
//若通过构造注入,bean(java类)中必须要有构造函数
通过<constructor-arg.../>注入,value="String等基本类型" ref=“bean”
可以通过index属性指定构造参数值将作为第几个构造参数值,index="0"表明作为第一个构造函数参数值,错位开了
一般采用设值注入为主,构造注入为辅
src\dayday\HelloSpring.java
package dayday; import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; /**
* Created by I am master on 2016/11/28.
*/
public class HelloSpring {
private Book book;
private String name; public HelloSpring(String name,Book book){
this.name=name;
this.book=book;
}
public void println(){
System.out.println("hello "+name+" ,study Spring hard!!!"+book.print());
} public static void main(String[] args){
ApplicationContext ctx=new ClassPathXmlApplicationContext("beans.xml");
HelloSpring hellospring=ctx.getBean("hellospring",HelloSpring.class);
hellospring.println();
} }
src\dayday\Book.java
package dayday; /**
* Created by I am master on 2016/11/28.
*/
public class Book {
private String bookname;
public Book(String bookname){
this.bookname=bookname;
}
public String print(){
return "read "+bookname;
}
}
src\dayday\Main.java
package dayday; import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; /**
* Created by I am master on 2016/11/28.
*/
public class Main {
public static void main(String[] args){
ApplicationContext ctx=new ClassPathXmlApplicationContext("beans.xml");
HelloSpring hellospring=ctx.getBean("hellospring",HelloSpring.class);
hellospring.println();
} }
src\dayday\beans.xml
<?xml version="1.0" encoding="UTF-8"?>
<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.xsd">
<bean id="hellospring" class="dayday.HelloSpring">
<constructor-arg value="dayday"></constructor-arg>
<constructor-arg ref="book"></constructor-arg>
</bean>
<bean id="book" class="dayday.Book">
<constructor-arg value="《Spring MVC》"></constructor-arg>
</bean>
</beans>
bean作用域的配置
用scope属性来配置bean的作用域
Singleton:默认值,容器初始时创建bean实例
(在执行 <bean id="hellospring" class="dayday.HelloSpring">这句是调用无参构造函数创建)
在整个容器的生命周期内只创建这一个bean,单例的
常用的还有prototype,每次调用getbean()方法就调用构造函数创建一个bean
初学Spring的更多相关文章
- 初学Spring有没有适合的书
初学者之前没有阅读java框架源码的习惯.没有阅读过源码,知道整体流程么?知道依赖注入的概念么?知道aop么?知道其中用到了哪些设计模式么?再说了,如果一上手就是源码?难道你没有注意到Spring的类 ...
- 初学 Spring boot 报错 Whitelabel Error Page 404
按照教程,写了个最简单的 HelloWorld,尼玛报错 -->Whitelabel Error Page 404. 网上99%都是项目结构不对,说什么 Application放在父级 pack ...
- 初学spring boot踩过的坑
一.搭建spring boot环境 maven工程 pom文件内容 <project xmlns="http://maven.apache.org/POM/4.0.0" xm ...
- 记录初学Spring boot中使用GraphQL编写API的几种方式
Spring boot+graphql 一.使用graphql-java-tools方式 <dependency> <groupId>com.graphql-java-kick ...
- 初学 spring
1.spring 开发环境,包含eclipse https://spring.io/tools3/sts/all/
- 初学spring(二)
1.spring推荐使用接口编程,配合di可以达到层与层之间解耦
- 初学spring(一)
1.spring 在ssh 中所处的位置 struts 是web框架(jsp,action,actionform) hibernate 是orm框架,处于数据持久层 spring 是容器框架,配置be ...
- 初学spring之入门案列
spring其实是一个很大的开源框架,而我学的就是spring framework,这只是spring其中的一小部分.有疑惑的可以去官网去看看,spring官网我就不提供了.一百度肯定有.和sprin ...
- 初学Spring的感觉
1.使用接口 不同的类实现同一接口后都会变成同一类型的类. spring作业1的思路 lab1: 建立一个有一个输出方法的接口类|并建一个英语类和一个数学类实现该接口. 这两个实现类都重写了那 ...
随机推荐
- SpringMVC之controller篇
概述 继 spring 2.0 对 Spring MVC 进行重大升级后,Spring 2.5 又为 Spring MVC 引入了注解驱动功能.现在你无须让 Controller 继承任何接口,无需在 ...
- PE文件学习系列二 DOS头分析
合肥程序员群:49313181. 合肥实名程序员群 :128131462 (不愿透露姓名和信息者勿加入)Q Q:408365330 E-Mail:egojit@qq.com PE文件结 ...
- Python笔记总结week5
Decorator:多层装饰器 #双层装饰器(用户登录,权限) #多层: 调用从最外层到最内层函数,返回值则从最内到最外层函数 USER_INFO = {} #USER_INFO['is_login' ...
- NoSQL生态系统——类似Bigtable列存储,或者Dynamo的key存储(kv存储如BDB,结构化存储如redis,文档存储如mongoDB)
摘自:http://www.ituring.com.cn/article/4002# NoSQL系统的数据操作接口应该是非SQL类型的.但在NoSQL社区,NoSQL被赋予了更具有包容性的含义,其意为 ...
- php crc32,md5,sha1,mhash测试结果
总结:php 自带hash mhash 用于散列只能加密 扩展mcrypt 用于加解密 对文件加密有的文件会隐藏换行,或者读取方式等影响导致结果不一致. 1.crc32 php: a.系统crc ...
- F2工作流引擎之-纯JS Web在线可拖拽的流程设计器(八)
Web纯JS流程设计器无需编程,完全是通过鼠标拖.拉.拽的方式来完成,支持串行.并行.分支.异或分支.M取N路分支.会签.聚合.多重聚合.退回.传阅.转交,都可以非常方便快捷地实现,管理员 ...
- glob模式
在学习gulp的过程中,gulp使用了被称作为glob的文件匹配模式. 接下来我们认识下什么是glob模式. 在计算机编程中,特别是类Unix环境,glob模式通过通配符来匹配文件名.例如:Unix命 ...
- BZOJ 1189 二分匹配 || 最大流
1189: [HNOI2007]紧急疏散evacuate Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1155 Solved: 420[Submi ...
- Android中的数据保存
形式 Android的数据保存分为3种形式:file, SharedPreference, Database 文件 主要思想就是通过Context类中提供的openFileInput和openFile ...
- html页面清除缓存
需求:页面每次打开时清除本页面的缓存. 页面打开时,由于缓存的存在,刚刚更新的数据有时无法在页面得到刷新,当这个页面作为模式窗口被打开时问题更为明显. 解决办法为: (1) 用HTML标签设置HTTP ...