Sping详解

Sping详解配置 pom xml 手动刷新 Maven 下载 jar 包

大家好,欢迎来到IT知识分享网。

 1.Spring环境搭建

1.1创建工程

配置pom.xml

Sping详解

手动刷新,Maven下载jar包

Sping详解

1.2测试

1.3继承junit

Sping详解

2.spring详解

2.1控制反转IOC

传统new一个对象:

@Test public void testMaster(){ Master master = new Master(); master.sayHellow(); } 

Master对象master在testMaster方法创建,master对象控制权属于testMaster

spring中,没有new Master操作

通过Spring的AplicationContext获得其中:context.getBean(“maste”)

getBean,方法的参数值master,对应的是spring-context..xml中的bean的id:

<bean id="master"class="pojo.Master"></bean>

2.2控制反转意义

补:ApplicationContext接口

示例:

缺点:生成对象更复杂(使用反射编程,损耗了效率)

优点:提高维护性、灵活性

例:猫和狗都是宠物,猫是喵喵叫,狗是汪汪叫。我们可以通过三个类来描述宠物、猫、狗之间的关系。在pojo包下创建三个类,Pet,Dog,Cat

package pojo; public abstruct class Pet{ //宠物都会叫,但叫不同 public abstruct void shout(); }
packag pojo; class Cat extends Pet{ @Override public void shout(){ System.out.println("喵喵"); } } class Dog extends Pet{ @Override public void shout(){ System.out.println("汪汪"); } } 

如果在代码中需要修改业务需求就需要修改业务代码。

耦合性高

为了降低耦合,我们可以将Cat或Dog对象交给Spring管理,在spring-context.xml中添加一个bean:

<bean id="pet"class="pojo.Dog"></bean>
@Test public void testPet(){ ApplicationContext context new classPathXmlApplicationContext("spring-config.xml); Petpet (Pet)context.getBean("pet"); pet.shout() }

3.多种方式注入

注解注入:(名称和位置)

3.1属性注入(setter注入)

属性注入:通过属性的setter方法进行注入,需要注入的属性必须有setter方法且命名必修符合规范

例:属性名abc,注入方法setABC()

<property name="属性名" value="基本类型的属性值"/> <property name="属性名" ref="对象的bean的id"/>

3.11注入基本类型

在Master类中添加name和age属性并添加getter/,setter方法。

public class Master{ private string name; private Integer age; //getter/setter暗

配置bean并注入age和name:

<bean id="master"class="pojo.Master"> <property name="name"value="张三"/> <property name="age"value="20"/> </bean>

通过property标签为对象注入属性。

<property name=“属性名”value=“属性值"/>

注入属性:

Sping详解

3.12注入对象类型

3.13集合类型

Sping详解

3.2构造方法注入

创建对象时注入属性

Sping详解

3.21按类型注入

Sping详解

// 实体类如下: @Data public class test { private String name; private Integer sex; public test(String name,Integer sex){ this.name=name; this.sex=sex; } } // XML文件如下 test.xml <?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"> <!--set方式注入 id是注入bean中的名字 class 是全限定类名 constructor-arg 是按照构造方式注入 index 是按照成员变量在构造函数中的参数的第几个 name 表示成员变量名 type 表示类型 value 表示值 ref 表示引用 可引用另外一个注入到Spring的中的值 --> <bean id="student1" class="com.example.spkie.model.test"> <constructor-arg index="0" name="name" value="构造方法注入"></constructor-arg> <constructor-arg index="1" name="sex" value="50"></constructor-arg> </bean> </beans> 

3.22按位置注入

3.23按名称注入–推荐

Sping详解

Sping详解

3.命名空间注入–类似属性注入

3.4工厂方法注入

Sping详解

3.5使用注解

注解注入:(名称和位置)

Sping详解

Sping详解

4.Bean的生命周期和作用域

4.1生命周期

Sping详解

1.实例化Bean

实例化不是初始化,是为bean分配内存空间

2.设置属性(对象注入)

3.Bean初始化

执行各种通知:Awear通知

执行初始化前置方法

执行构造方法:·执行@PostConstruct;执行init-method)方法;

执行初始化后的后置方法

4.使用Bean

5.销毁Bean

销毁bean的方法:@PreDestroy和destroy-method方法

4.2作用域

Sping详解

六个作用域:

设置作用域:

@Component public class UserBeans { @Bean(name = {"userinfo"}) public User getUser(){ User user = new User(); user.setId(1); user.setName("小狗"); return user; } } @Component public class BeanScope1 { @Autowired private User userinfo; public User getUser(){ User user = userinfo; user.setName("张三"); return user; } } @Component public class BeanScope2 { @Autowired private User userinfo; public User getUser(){ return userinfo; } } public class Main { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml"); BeanScope1 beanScope1 = context.getBean(BeanScope1.class); User user1 = beanScope1.getUser(); System.out.println("BeanScope1:" + user1); BeanScope2 beanScope2 = context.getBean(BeanScope2.class); User user2 = beanScope2.getUser(); System.out.println("BeanScope2:" + user2); } } 

设置值–直接设置

@Component public class UserBeans { @Bean(name = {"userinfo"}) @Scope("prototype") public User getUser(){ User user = new User(); user.setId(1); user.setName("小狗"); return user; } } 

设置值–枚举设置

@Component public class UserBeans { @Bean(name = {"userinfo"}) @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) public User getUser(){ User user = new User(); user.setId(1); user.setName("小狗"); return user; } } 

5.AOP

5.1AOP概念

Sping详解

自动代理实现AOP

Sping详解

Sping详解

Sping详解

5.2前置增强

监控程序是否进入方法

Sping详解

Sping详解

Method method 反射回的方法(当前监控的方法)

Object objects 方法里的参数

ONullable Object o 当前方法所在类

Sping详解

增强类需声明成bean

Sping详解

测试方法:

Sping详解

测试类:

Sping详解

5.2后置增强

Sping详解

ONullable Object returnVal 方法返回值

Method method 反射回的方法(当前监控的方法)

Object objects 方法里的参数

ONullable Object o 当前方法所在类

Sping详解

5.3异常抛出增强

Sping详解

5.4环绕增强

Sping详解

Sping详解

Sping详解

5.5最终增强

Sping详解

最终增强:和环绕增强相比没有前置增强

Sping详解

5.6自定义增强

Sping详解

写入增强

Sping详解

Sping详解

普通的java类写入增强

注入bean,使用asepect标签,aop注入增强

5.7切入点excution表达式

Sping详解

Sping详解

Sping详解

5.8 aspectj实现aop

即注解方式实现AOP

Sping详解

Sping详解

Sping详解

Sping详解

定义aspect.service类

使用@PoinCut定义注解

开启增强:

Sping详解

Sping详解

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/126925.html

(0)
上一篇 2025-09-14 20:26
下一篇 2025-09-14 20:33

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信