spring4.0学习笔记day1

来源:互联网 发布:it项目经理成长手记 编辑:程序博客网 时间:2024/06/05 02:21

spring4.0学习笔记day1

学习了javaSE基础和struts2,mybatis,后觉得自己掌握的不怎么样,所以现在每天都写博客记录一下系统的学习spring+springmvc+mybatis过程。从spring开始:

  1. spring概念
    spring是一个开源的一站式轻量级框架,轻量级表示对容器没有依赖性,易于进行配置。一站式指spring可以分别使用springMVC、ioc、jdbcTemplate完成web层、service层、dao层的所有工作。
    其核心是aop和ioc:
    aop意思是面向切面编程,不修改源代码实现扩展功能。
    ioc意思是控制反转,通过对spring配置创建类对象,不需要new的方式创建。

  2. spring的ioc底层原理

    ioc操作有两部分1、ioc的配置文件方式2、ioc的注解方式
    ioc底层使用技术:
    (1)xml配置文件
    (2)dom4j解决xml
    (3)工厂设计模式
    (4)反射
    参考了传智播客的视屏

  3. 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结束,还是挺简单的。。。。。。。明天继续

原创粉丝点击