Spring第一天
Spring框架
一丶Sprinf框架
1.1概念
- Spring是一个项目管理框架,同时也是一套javaEE解决方案。
- Spring是众多优秀设计模式的组合(工厂,单利,代理,适配器,包装器,观察者,模板,策略)。
- Spring并未替代现有框架产品,而是将众多框架进行有机整合,简化企业级开发,俗称“胶水框架”。
1.2Spring的组成
Spring架构有诸多模块祖成,可分类为
- 核心技术:依赖注入,事件,资源,i18n,验证,数据绑定,类型转换,SpEl,AOP。
- 测试:模拟对象,TestContext框架,Spring MVC测试,WebTestClient。
- Spring MVC 和 Spring WebFlux WEB框架
- 集成:远程处理,JMS,JCA,JMX,电子邮件,任务,调度,缓存。
- 语言:Kotliin,Froovy,动态语言。
1.3Spring环境搭建
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.3.10</version> </dependency>
定义目标Bean类型
public class MyClass { public void show(){ System.out.println("show 方法!!!"); } }
配置spring-context.xml中的<beans>内部配置bean标签
<?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-2.5.xsd"> id:“自定义”标识
class:“需要被创建的目标对象全限定名”
<bean id="my" class="com.cyf.bean.MyClass"></bean> </beans>
调用Spring工厂API(ApplictionContext接口)
import com.cyf.bean.MyClass; import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestFactory { public static void main(String[] args) {
//1.读取配置文件中所需要创建的bean对象,并获得工厂对象 ClassPathXmlApplicationContext cac = new ClassPathXmlApplicationContext("spring-context.xml"); //2.通过id获取bean对象
MyClass bean = (MyClass)cac.getBean("my");
//3.使用对象 bean.show(); } }
二丶IOC控制反转【重点】
控制反转:反转了依赖关系的满足方式,由之前的自己创建依赖对象,变为有工厂推送,解决了具有依赖关系的组件之间的强耦合,使得项目形态更加稳健
public class UserServletImpl implements UserServlte { private userDao userDao1; public userDao getUserDao1() { return userDao1; } public void setUserDao1(userDao userDao1) { this.userDao1 = userDao1; } public void quer() { System.out.println("主方法quer: hello!!!"); userDao1.Userdd(); } }
<bean id="userdao" class="com.cyf.dao.impl.userDaoImpl"></bean> <bean id="userServlte" class="com.cyf.servlet.impl.UserServletImpl"> <property name="userDao1" ref="userdao"></property>
name:写属性值 ref:你要用到的实现类 </bean>
三丶DI依赖注入【重点】
3.1 概念:在Spring创建对象的同时,为其属性赋值,称之为依赖注入
3.2 SET注入:创建对象时,Spring工厂会通过Set方法为对象的属性赋值
3.2.1定义目标类型
public class User { private Integer id; private String pad; private Date date; private String[] hobbys; private Set<String> set; private List<String> names; private Map<String,String> map; private Properties properties;
3.2.2基本类型+字符串类型+日期类型
<!-- 基本类型 + 字符串类型 + 日期类型 --> <bean id="ul" class="com.cyf.user.User"> <property name="id" value="1001"></property> <property name="pad" value="123456"></property> <property name="date" value="1990/01/01"></property> </bean>
3.2.2容器类型
<bean id="ul2" class="com.cyf.user.User"> <!--数组--> <property name="hobbys"> <array> <value>D123</value> <value>C123</value> <value>A123</value> <value>V123</value> <value>E123</value> </array> </property> <!--Set集合--> <property name="set"> <set> <value>1348234</value> <value>1348234</value> <value>1348234</value> <value>1348234</value> </set> </property> <!--List集合--> <property name="names"> <list> <value>123</value> <value>345</value> </list> </property> <!--Map集合--> <property name="map"> <map> <entry key="CN1" value="Chian"></entry> <entry key="CN2" value="Chian"></entry> <entry key="CN3" value="Chian"></entry> </map> </property> <!--properties--> <property name="properties"> <props> <prop key="fidas1">One</prop> <prop key="fidas2">One</prop> <prop key="fidas3">One</prop> </props> </property> </bean>
3.2.3自建类型
3.2.4构造注入
3.2.4自动注入
四丶Bean细节
4.1可控制简单对象的单例,多例模式
配置:在bean标签添加 scope=“singleton|prototype”
singleton:多例
prototype:单例
浙公网安备 33010602011771号