标签:pack sources 实例 表示 beans 事物 lock getbean struct
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_体系结构
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(); }
<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();
bean依赖注入: 通过框架为bean中的属性赋值, 它是spring框架核心loC的具体体现,在编写程序时,通过loC控制反转,将对象的创建交给Spring
,但是代码中不可能出现没有依赖的情况. loC解耦值是降低他们的依赖关系,但是不会消除.
1_引用数据类型 把其他bean注入给当前bean的属性的两种方式
Bean依赖注入的方式:
<!--UserService service= new UserService()--> <bean id="userService" class="com.ppvir.service.UserService"> <!-- service.setUserDao(userDao) --> <property name="userDao" ref="userDao"/> </bean>
1 <!--p 命名空间--> 2 3 xmlns:p="http://www.springframework.org/schema/p"
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赋值给属性
<import resource="applicationContext-user.xml"/> <import resource="applicationContext-product"/>
标签:pack sources 实例 表示 beans 事物 lock getbean struct
原文地址:https://www.cnblogs.com/ppvir/p/11369952.html