spring

mac2025-12-17  6

一:Spring框架介绍 1.什么是框架? a.是一系列jar包的组合,jar包中是一系列字节码文件,使用的时候需要导入这些jar包 b.框架相当于是一个半成品,不需要从0开始,提高开发效率 c.规范代码,使用同一个框架,你写的代码就必须按照整个框架的规范来写,方便维护 2.Spring框架? Spring是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架 轻量级:相对于重量级(EJB – 这个框架设计比较复杂,而且使用起来非常麻烦),使用起来非常简单,设计比较简单 控制反转(IoC) – Spring的核心功能:将创建对象(new的方式)的控制权和给属性赋值的控制权交给Spring容器 面向切面(AOP):将通用的逻辑抽取出来,然后通过Spring的一些功能作用到目标组件上 容器框架:装对象的,Spring相当于一个大的工厂(生成对象,存储对象),Spring创建完对象之后就放到容器中,使用的时候直接Spring提供的方法获取 3.Spring模块化 1.模块化:就是将一个大的项目分成几个小模块 大的项目 – 分成几个模块 – 每一个模块中(分成几个功能) 结构清晰,职责分离 2.Spring中大致有20个模块 二:Spring编程 1.第一个Spring测试代码 a.先导入jar包:context,beans,core,其他依赖包 b.导入配置文件applicationContext.xml,文档申明在课件上面拷贝 程序运行时/项目部署时 – 框架解析xml – 如果发现xml中有配置信息 – 就会根据xml配置创建对象 – 将创建的对象方法map集合中 c.写一个测试类,类中写一个对象方法 d.在applicationContext.xml去注册Bean 2.Spring容器介绍 一般交给Spring去管理的对象都称之为Bean 对象在容器中,必须先获取容器才能获取容器中的资源 Spring容器创建对象默认是调用Bean的无参构造,如果没有报错 NoSuchMethodException a.BeanFactory – 不推荐使用 BeanFactory是在获取的时候才会创建对象 – 懒加载 – 延迟加载(获取时才创建对象) b.ApplicationContext – 推荐使用 ApplicationContext是在实例化容器的时候就会根据配置创建所有对象 – 迫切加载(容器实例化就会创建对象) 3.获取Bean的方式 容器对象.getbean(“id属性值”,字节码对象) 三:Spring配置的细节 1.xml中配置Bean的id和name属性值,建议用id 2.配置懒加载 Beanfactory – 懒加载(使用的才创建对象) ApplicationContext – 迫切加载(容器实例化的时候就创建了对象) 配置懒加载: 第一种:配置单个Bean懒加载:lazy-init=“true” 第二种:配置全局的懒加载:default-lazy-init=“true” 3.Bean的作用域 创建一个对象:单例 创建多个对象:多例/原型 Spring容器(BeanFactory和ApplicationContext)默认创建的对象是单例 通过scope="prototype"将Bean设置为多例的 4.Bean的生命周期 Bean对象的创建和销毁: 1.Spring容器默认创建Bean是单例的,可以设置为多例:scope=“prototype” 2.不同的容器创建对象的时机不一样 3.Bean对象的创建 a.创建对象的实质是Spring容器根据配置调用无参构造方法创建的 b.BeanFactory容器是在获取对象的时候才创建的,ApplicationContext默认是在容器实例化的时候就创建对象 4.Bean对象的初始化 – init-method指定 a.初始化的实质是Spring容器根据配置调用指定的初始化方法 b.会跟随无参构造调用 5.Bean对象的销毁(单例的会管理,多例的不会管理) a.销毁的实质是Spring容器根据配置调用指定的销毁方法 b.关闭容器的时候就会调用,但是对于多例的对象不会管理 注意:Bean的生命周期一般来说不用去管理 四:Spring测试 1.什么是Spring测试? Spring测试会帮助我们加载配置文件没实例化容器对象,我们代码种只需要回去就行 2.Spring测试步骤? 1.导包 – test 2.编写测试类和方法 //启动Spring测试 @RunWith(SpringJUnit4ClassRunner.class) //加载上下文配置文件,并实例化容器对象 @ContextConfiguration(“classpath:applicationContext.xml”) public class SpringTest {

//自动装配 -- Spring就会到容器中去找(根据名字或类型去找一个对象,并注入(赋值)给作用的字段) @Autowired //前提是一顶要有这个对象才能注入成功 private DemoBean bean; } 注意事项: 1.配置文件路径问题 2.@Autowired使用时,容器中必须有对象才能注入成功,并且不管名字是否一样,类型必须一样

五:Spring注入 注入:给对象的成员赋值(Spring容器注入 – 配置) 构造器注入:有参构造 – 基本不使用 setter方法注入=bean属性注入:setter方法 – 常用

构造器注入,有它就会调用有参,无它就会调用无参 <constructor-arg index="0" value="RAM 512"></constructor-arg> Spring不仅可以管理外部Bean(自己写的类 -- Phone,Person,Dog),也可以管理内部Bean(jdk自带的) 将Date交给Spring去管理: <bean id="now" class="java.util.Date"></bean>

六:三层架构中使用Spring 表现层: 业务层: 数据层:JDBC 1.完成一个添加的功能 新建一个数据库,然后创建表emp (id int primary key auto_increment,username varchar,password varchar) 2.创建实体类domain包 – Emp类 3.导入连接池的jar包,和数据库驱动包 dbcp,pool driver 4.将数据库连接池交给Spring去管理

<bean id="source" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"></property> <property name="username" value="root"></property> <property name="password" value="123456"></property> <property name="url" value="jdbc:mysql://localhost:3306/db1101"></property> </bean> 5.数据层规范: dao包 -- IEmpDao接口 -- void addEmp(Emp emp) dao.impl包 -- EmpDaoImpl实现类 -- 注入dataSource =====配置 <bean id="dao" class="cn.itsource.dao.impl.EmpDaoImpl"> <property name="source" ref="source" ></property> </bean> =====类 private BasicDataSource source; public void setSource(BasicDataSource source) { this.source = source; } @Override public void addEmp(Emp emp) { //贾琏欲执事 try { //获取连接 Connection conn = source.getConnection(); //获取预编译对象 PreparedStatement ps = conn.prepareStatement("insert into emp(username,password) values(?,?)"); //设置占位符 ps.setString(1,emp.getUsername()); ps.setString(2,emp.getPassword()); ps.executeUpdate();//执行sql } catch (SQLException e) { e.printStackTrace(); }`` } 6.测试 @Autowired private IEmpDao dao; @Test public void testBean() throws SQLException{ Emp emp = new Emp();//模拟数据,从页面传递过来 emp.setUsername("tom1"); emp.setPassword("1234561"); dao.addEmp(emp); }
最新回复(0)