Spring基础:一
Posted ppvir
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring基础:一相关的知识,希望对你有一定的参考价值。
1 Spring是什么?
1_Spring是分层的JAVA SE/EE应用, full-stack轻量级全栈式开源框架.
两个内核:
反转控制: loC(Inverse Of Control), 把对象的创建交给框架.
面向切面编程: AOP(Aspect Oriented Programming), 对动态代理再次封装
2_好处:
1.方便解耦,简化开发,
将对象的创建交给Spring完成; 将对象之间的依赖关系交给Spring控制. 借助loC降低程序之间的耦合,目的是去掉new对象的过程.
2.AOP编程的支持
借助AOP来实现方法的动态增强
3.支持声明式事物
业务层控制事物, 之前是编程式事物, spring只需要配置就可以
4.方便集成其他框架,比如structs, hibernate, mybatis等
3_体系结构
2 Spring程序的开发步骤
1_导入spring开发的基本包坐标
<!--导入Spring依赖--> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.0.5.RELEASE</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> </dependency> </dependencies>
2_编写Dao接口和实现类
//编写接口 package com.ppvir.dao; public interface IUserDao void save(); //编写实现接口的实体类 package com.ppvir.dao.Impl; import com.ppvir.dao.IUserDao; import org.springframework.context.support.ClassPathXmlApplicationContext; public class UserDaoImpl implements IUserDao public void save() System.out.println("save running....");
3_在resources目录下创建spring核心配置文件
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"><bean id="userDao1" class="com.ppvir.dao.Impl.UserDaoImpl" scope="prototype" ></bean></beans>
4_在spring配置文件中配置UserDaoImpl
<bean id="userDao1" class="com.ppvir.dao.Impl.UserDaoImpl" scope="prototype" ></bean>
5_使用Spring的api获得Bean实例
//测试 public static void main(String[] args) //使用ClassPathXmlApplicationContext从类的根据经下加载配置文件 (target/classes) ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); //根据Bean的id从容器中获得bean实例, 返回的是object类型, 需要强转 IUserDao userDao = (IUserDao) context.getBean("userDao"); userDao.save();
3 Spring 配置文件
1_bean标签
- 功能
- 用于配置对象交由Spring创建
- 注意事项
- 默认情况下调用类中的无参构造方法, 如果没有无参构造则不能创建成功
- id值是唯一标识, 不能重复
- 基本属性
- ID Bean实例在Spring容器中的唯一标识
- class Bean的全类名 scope 对象的作用取值范围
- singleton: 单例--表示每次调用getBean("")方法,获取到的都是同一个对象
- prototype: 多例--表示每次调用getBean("")方法取到的值都是一个新对象,每次获取到的都不一样
- bean对象的创建相关属性
- 方式一: 无参构造方法实例化
-
<bean id="userDao" class="com.ppvir.dao.impl.UserDaoImpl"/> 相当于 UserDao userDao = new UserDaoImpl();
- 方式二: 工厂静态方法实例化
-
//第一步 创建静态工厂 public class StaticFactory public static UserDao getUserDao() return new UserDaoImpl(); //第二步 配置class属性指定工厂类, factory-method指定工厂方法 <bean id="userDao" class="com.ppvir.factory.StaticFactory" factory/>
相当于 UserDao userDao = StaticFactoty().getUserDao();
- 方式三: 工厂实例方法实例化
-
//第一步 创建工厂类 public class DynamicFactory public UserDao getUserDao() return new UserDaoImpl(); //第二步 先将工厂类通过bean对象配置到xml中 <bean id="factory" class ="com.ppvir.factory.DynamicFactory"/> //第三步 配置userDao, 通过factory-method指定具体工厂,通过factory-method指定具体工厂的方法 <bean id="userDao" factory-bean="factory" factory-method="getUserDao"/>
相当于UserDao userDao = new DynamicFactory().getUserDao();
- 依赖注入(DI)的三种数据类型
bean依赖注入: 通过框架为bean中的属性赋值, 它是spring框架核心loC的具体体现,在编写程序时,通过loC控制反转,将对象的创建交给Spring
,但是代码中不可能出现没有依赖的情况. loC解耦值是降低他们的依赖关系,但是不会消除.
1_引用数据类型 把其他bean注入给当前bean的属性的两种方式
Bean依赖注入的方式:
-
- set方法依赖注入:
- 会调用userDao属性对应的setUserDao方法将id="userDao"的bean注入给userDao属性
-
<!--UserService service= new UserService()--> <bean id="userService" class="com.ppvir.service.UserService"> <!-- service.setUserDao(userDao) --> <property name="userDao" ref="userDao"/> </bean>
- p命名空间依赖注入:
- 本质上也是set方法注入,凡是比set方法更加方便,主要体现在配置文件中
- 引入p命名空间
-
1 <!--p 命名空间--> 2 3 xmlns:p="http://www.springframework.org/schema/p"
- set方法依赖注入:
2. 修改注入方式
<bean id="userService" class="com.itheima.service.impl.UserServiceImpl" p:userDao-ref="userDao"></bean>
-
- 使用构造方法依赖注入
-
<!--XML代码部分--> <bean id = "userService" class= "com.ppvir.service.impl.UserServiceImpl"> <constructor-arg name="userDao" ref="userDao"/> <!-- name值userDao是属性名 ref值userDao是beanID--> </bean>
//java代码部分 public UserServiceImpl(UserDao userDao) this.userDao = userDao;
-
- 使用构造方法依赖注入
2_普通数据类型
-
-
1 //1_配置文件部分,添加属性使用property标签, name="" value="" 2 //name中的值时setAge,setCompany 3 4 <bean id="userDao" class="com.ppvir.dao.impl.UserDaoImpl"> 5 <property name="company" value="xxx有限公司"></property> 6 <property name="age" value="20"></property> 7 </bean> 8 9 10 //2_java代码部分 11 12 public class UserDaoImpl implements UserDao 13 private String company;//私有化成员变量 14 private int age; 15 /* 依赖注入的两种方式: 构造方法,set方法 */ 16 public void setCompany(String company) 17 this.company = company; 18 19 public void setAge(int age) 20 this.age = age; 21 22 public void save() 23 System.out.println(company+"==="+age); 24 System.out.println("UserDao save method running...."); 25 26
-
3_集合数据类型(List<String>的注入)
-
-
1 /* 2 配置文件部分
数组和set集合的注入方式与list类似 3 */ 4 5 <bean id="userDao" class="com.ppvir.dao.impl.UserDaoImpl"> 6 <property name="strList"> 7 <list> <!--list集合注入,直接在list标签中添加value--> 8 <value>集合1</value> 9 <value>集合2</value> 10 <value>集合3</value> 11 </list> 12 </property> 13 </bean> 14 15 /* 16 java代码部分 17 */ 18 19 public class UserDaoImpl implements UserDao 20 private List<String> strList; 21 public void setStrList(List<String> strList) 22 this.strList = strList; 23 24 public void save() 25 System.out.println(strList); 26 System.out.println("UserDao save method running...."); 27 28
-
<property>标签中,容易混淆的两个属性名 value, ref都是给属性设置值的,
value是为普通类型设置值
ref是把当前容器中的其他bean赋值给属性
2_import标签
- 功能: 引入其他xml配置文件
- 注意; 该标签和bean是兄弟关系, 不是嵌套关系
-
<import resource="applicationContext-user.xml"/> <import resource="applicationContext-product"/>
以上是关于Spring基础:一的主要内容,如果未能解决你的问题,请参考以下文章