spring4.0学习笔记day1
来源:互联网 发布:it项目经理成长手记 编辑:程序博客网 时间:2024/06/05 02:21
spring4.0学习笔记day1
学习了javaSE基础和struts2,mybatis,后觉得自己掌握的不怎么样,所以现在每天都写博客记录一下系统的学习spring+springmvc+mybatis过程。从spring开始:
spring概念
spring是一个开源的一站式轻量级框架,轻量级表示对容器没有依赖性,易于进行配置。一站式指spring可以分别使用springMVC、ioc、jdbcTemplate完成web层、service层、dao层的所有工作。
其核心是aop和ioc:
aop意思是面向切面编程,不修改源代码实现扩展功能。
ioc意思是控制反转,通过对spring配置创建类对象,不需要new的方式创建。spring的ioc底层原理
ioc操作有两部分1、ioc的配置文件方式2、ioc的注解方式
ioc底层使用技术:
(1)xml配置文件
(2)dom4j解决xml
(3)工厂设计模式
(4)反射spring ioc入门案例
第一步:导入jar包
我们导入红色框中的jar包可以做最基本的功能
可以在这里下载spring下载后解压在libs文件下找到
一共导入6个jar包
第二步:创建类 并创建方法
package com.ioc;public class User { public void add(){ System.out.println("add .."); } public static void main(String[] args){ User user = new User(); user.add(); }}
第三步:创建spring配置文件,配置创建类
在src下创建一个配置文件applicationContext.xml
引入schema约束
<?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="user" class="com.ioc.User"></bean> </beans>
第四步:创建测试类
package com.ioc;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class TestIOC { @Test public void testUser(){ //加载配置文件 ApplicationContext context= new ClassPathXmlApplicationContext("applicationContext.xml"); //得到创建对象 User user = (User) context.getBean("user"); System.out.println(user); user.add(); }}
运行结果:
com.ioc.User@5837fdb5
add ..
4. spring bean管理
(1)bean实例化方式:
第一种:使用类的无参构造方法(常用) 参考上文
注意:如果类中写了有参构造方法必须写无参构造方法,不然会报错。
第二种:使用静态工厂创建
创建bean2类
package com.bean;public class bean2 { public void add(){ System.out.println("bean2 .."); }}
创建bean2Factory类
package com.bean;public class bean2Factory { public static bean2 getbean2(){ return new bean2(); }}
在applicationContext.xml中添加
<bean id="bean2" class="com.bean.bean2Factory" factory-method="getbean2"></bean>
测试类
package com.bean;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class TestIOC { @Test public void testUser(){ //加载配置文件 ApplicationContext context= new ClassPathXmlApplicationContext("applicationContext.xml"); //得到创建的对象 bean2 b = (bean2) context.getBean("bean2"); System.out.println(b); b.add(); }}
运行结果
com.bean.bean2@40a6caf8
bean2 ..
第三种:使用实例工厂创建
创建不是静态的方法,返回类的对象
创建bean3类
package com.bean;public class bean3 { public void add(){ System.out.println("bean3 .."); }}
创建bean3Factory类
package com.bean;public class bean3Factory { public bean3 getbean3(){ return new bean3(); }}
在applicationContext.xml中添加
<bean id="bean3Factory" class="com.bean.bean3Factory"></bean><bean id="bean3" factory-bean="bean3Factory" factory-method="getbean3"></bean>
测试类
import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class TestIOC { @Test public void testUser(){ //加载配置文件 ApplicationContext context= new ClassPathXmlApplicationContext("applicationContext.xml"); //得到创建的对象 bean3 b = (bean3) context.getBean("bean3"); System.out.println(b); b.add(); }}
运行结果
com.bean.bean3@6bb4124d
bean3 ..
(2)bean标签的常用属性
id属性:在代码中用于取到配置对象
class属性:创建对象所在类的全路径
name属性:功能与id一样,id中不能包含的特殊符号可以在name中存在
scope属性:singleton单例、prototype多实例、request创建对象放在request中、session创建对象放在session中、globalSession创建对象放在globalSession中
属性注入:
spring只支持前两种分别在applicationContext.xml使用property和constructor-arg标签设置就不展示了…..
注入对象类型属性:
UserDao:
package com.ioc;public class UserDao { public void add(){ System.out.println("Dao......."); }}
UserService
package com.ioc;public class UserService { //定义dao类型 private UserDao userdao; //生成set方法 public void setUserdao(UserDao userdao) { this.userdao = userdao; } public void add(){ System.out.println("Service...."); userdao.add(); }}
配置service和dao对象
<bean id="userDao" class="com.ioc.UserDao"></bean> <bean id="userService" class="com.ioc.UserService"> <!-- name是service类中dao的属性名字 ref是dao配置bean的id --> <property name="userdao" ref="userDao"></property> </bean>
测试类
package com.ioc;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class TestIOC { @Test public void testUser(){ //加载配置文件 ApplicationContext context= new ClassPathXmlApplicationContext("applicationContext.xml"); //得到创建对象 UserService service = (UserService) context.getBean("userService"); service.add(); }}
输出结果
Service….
Dao…….
还有p名称空间注入、复杂类型注入,很简单百度一下就会用了。。。
DI不能单独存在,需要在IOC基础上完成操作。
5. spring整合web项目
new 对象功能可以实现,但是每次都要加载配置文件,所以执行效率很低。
解决方法:把加载配置文件和创建对象过程,在服务器启动时完成。
实现原理:
在服务器启动时为每个项目创建一个ServletContext对象,监听器听到ServletContext对象创建时加载配置文件。创建出来的对象放在ServletContext域对象里面(setAttribute方法)。获取对象时,在ServletContext域中得到(getAttribute方法)。spring已经帮我们完成了这些操作。
day1结束,还是挺简单的。。。。。。。明天继续
- spring4.0学习笔记day1
- Spring4.0学习笔记--IOC
- Spring4.0学习笔记--AOP
- Spring4.0学习笔记-1
- Spring4.0学习笔记-AOP
- Spring4.0学习笔记 第一章
- Python 0基础学习笔记-day1
- 学习笔记之day1
- Struts2 学习笔记 day1
- java学习笔记day1
- CCNA学习笔记Day1
- Android学习笔记 Day1
- python学习笔记 day1
- Android学习笔记day1
- AngularJS学习笔记-day1
- Python学习笔记Day1
- git学习笔记 day1
- Scala学习笔记Day1
- java提高篇(十二)-----equals()
- 如何将AndroidStudio项目发布到Github
- 利用JS把字符串转换为数字的三种方法
- 贵阳八大浪漫求婚地
- 解决Pod静态库时出现的Podfile.lock: No such file or directory报错问题
- spring4.0学习笔记day1
- Unity3D开发
- 现代浏览器的工作原理
- 递归函数的几个例子
- THINK5多模块-多应用的误区
- H5加载音乐
- iOS视频压缩存储至本地并上传至服务器
- CentOS5.5 下搭建 PHP 环境(最佳的LAMP环境)
- leetcode-7 Reverse Integer