IOC控制反转:
依赖注入:
需要的jar文件
dist\spring.jar
lib\jakarta-comnons\comnons-logging.jar
lib\aspectj\aspectjweaver.jar
aspectjrt.jar
lib/cglib/cglib nodep2.1_3.jar
lib\j2ee\common-annotation.jar
实例化Spring容器的方法
ApplicationContext ctx= new ClassPathXmlApplication(new String[]("beans.xml"));
三种实例化bean的方法
1、使用构造器实例化:(绝大部分都是用该方法)
ApplicationContext ctx= new ClassPathXmlApplication(new String[]("beans.xml"));
<bean id="orderService" class="bean的路径"></bean>
2、静态工厂方法实例化:
public class OrderFactory{
public static OrderServiceBean createOrder(){
return new OrderServiceBean();
}
}
<bean id="orderService" class="工厂类路径" factory-method="工厂类方法名称createOrder"></bean>
3、实例工厂方法实例化
public class OrderFactory{
public OrderServiceBean createOrder(){
return new OrderServiceBean();
}
}
<bean id="orderServiceFactory" class="工厂类路径"></bean>
<bean id="orderService" factory-bean="工厂类路径" factory-method="工厂类方法名称createOrder"></bean>
spring容器管理的bean对象的作用于
1、默认情况下是单实例(同一个bean);
2、<bean id="orderService" class="bean的路径" scope="prototye"></bean>添加了scope属性指定作用域时可以在每次getBean方法调用时生成一个新的实例;
spring管理的bean的生命周期
1、在默认情况下,在容器实例化的时候就对bean进行实例化了;
2、当scope="prototye"时,就在getBean方法时才实例化bean;
3、可以在beans.xml文件中设置lazy-init="true"来延迟初始化(在容器实例化的时候bean不实例化),实际中一般不用这个属性;
4、可以在beans.xml文件中设置init-method="方法名称"来在实例化bean完成后立刻调用该方法;
5、可以在beans.xml文件中设置destroy-method="方法名称"来在bean销毁的时候调用该方法;(默认情况下只有在应用关闭的时候才会关闭spring容器实例)正常的关闭方法是:
AbstractApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");(注意是抽象类)
ctx.close();
依赖注入
在程序运行期间,由外部容器动态的将以来对象注入到组件中;
############就是让容器来实例化类(被注入的类),一定要添加属性的set方法#########################
注入方法:
1、通过属性的setter方法注入:(手动)
<bean id="personDao" class="business.dao.impl.PersonDaoBean"></bean>
<bean id="personServiceBean" class="businessbeans.impl.PersonServiceBean" init-method="open" destroy-method="destroy">
<property name="pd" ref="personDao"></property>
</bean>
使用bean的构造器注入依赖对象或基本类型
被注入的类中需要有构造函数,例如
public PersonServiceBean(PersonDao pd, String name) {
super();
this.pd = pd;
this.name = name;
}
2、使用内部bean的方式,但该bean不能被其他bean使用:(不常用,手动)
<bean id="personServiceBean" class="businessbeans.impl.PersonServiceBean" init-method="open" destroy-method="destroy">
<property name="pd">
<bean id="personDao" class="business.dao.impl.PersonDaoBean"></bean>
</property>
</bean>
3、最优雅的依赖属性注入方法:使用Field注入(一般用于注解方式,手动)
添加lib\j2ee\commons-annotation.jar
添加context容器,并打开
xmlns:context="http://www.springframework.org/schema/context"
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xmd
@Autowired默认按类型匹配 @Resource默认按名称匹配,无匹配名称则按类型匹配(推荐Resource方法)
@Resource(可缺省name="")根据属性的名称去xml文件中寻找对应的id或name,如果找到直接注入/如果没找到匹配属性的类型与xml中配置的类型,相同则注入;
可以不写get set方法
自动装配(不推荐使用)
不需要注解,只需要在<bean></bean>标签中添加autowire属性;必须要有set方法
不同类型数据的注入
1、类类型(如上)
2、注入一个普通属性(如String name="yanzhexian");
<bean id="personDao" class="business.dao.impl.PersonDaoBean"></bean>
<bean id="personServiceBean" class="businessbeans.impl.PersonServiceBean" init-method="open" destroy-method="destroy">
<property name="pd" ref="personDao"></property>
<property name="name" value="yanzhexian"></property>
</bean>
PS:spring会自动转换注入的普通类型到类中定义的类型
3、注入集合类型(set map list等)
set类型
<property name="sets">
<set>
<value>第一个</value>
<value>第二个</value>
<value>第三个</value>
</set>
</property>
list类型
<property name="lists">
<list>
<value>一</value>
<value>二</value>
<value>三</value>
</list>
</property>
property类型
<property name="properties">
<props>
<prop key="key1">value1</prop>
<prop key="key2">value2</prop>
<prop key="key3">value3</prop>
</props>
</property>
Map类型
<property name="maps">
<map>
<entry key="key1" value="value1"></entry>
<entry key="key2" value="value2"></entry>
<entry key="key3" value="value3"></entry>
</map>
</property>
PS:集合类型的定义与遍历
private Set<String> sets=new HashSet<String>();
private List<String> lists= new ArrayList<String>();
private Properties properties =new Properties();
private Map<String,String> maps=new HashMap<String,String>();
//尝试输出以来注入的集合属性sets
System.out.println("=======Set======");
for(String value:this.getSets()){
System.out.println(value);
}
//尝试输出依赖注入的list集合属性lists
System.out.println("=======List======");
for(String value:this.getLists()){
System.out.println(value);
}
//尝试输出依赖注入的Properties集合属性maps
System.out.println("=======Properties======");
for(String key:this.getProperties().keySet()){
System.out.println(key+"="+this.getProperties().get(key));
}
//尝试输出依赖注入的Map集合属性maps
System.out.println("=======Map======");
for(String key:this.getMaps().keySet()){
System.out.println(key+"="+this.getMaps().get(key));
}
给spring配置文件减肥(在类路径下用自动扫描的方式,注,没有添加依赖注入是不会有依赖属性注入的)
1、引入context这个命名空间和xmd文件
2、<context:component-scan base-package=""></context:component-scan>
3、标注@Service业务层 @Controller控制层 @Repository DAO层 @Component其他层
@Scope指定作用域范围 @PostConstruct指定bean初始化方法 @PreDestroy指定容器容器关闭的方法
4、使用注解时当不指定bean的名称,bean的名称就是类的简单名称(第一个字母小写)
5、可以在注释后面直接添加名称来定义bean的名称@Service("NAME");
AOP代理对象(主要是对权限管理模块应用)
代理对象--------目标对象
1、拦截所有业务方法,判断用户是否有权限,有权限就允许它执行业务方法,没有权限就不允许它执行业务方法(是否有权限根据user是否为null模拟)
2、用JDK提供的Proxy代理类来创建代理对象(目标对象必须实现接口);
如果目标对象没有实现接口
1、引入cglib.jar文件
2、用cglib来创建代理对象:
Enhancer enhancer = new Enhance();
enhancer.setSuperclass(this.targetObject.getClass);
enhancer.setCallback(this);
return enhancer.create();
PS:代理类一定要实现MethodInterceptor接口,并通过该接口来调用目标类中的业务方法;
AOP概念:前置通知,后置通知,例外通知,最终通知,环绕通知
Aspect切面 joinpoint连接点(拦截到的每一个业务方法) pointcut切入点(拦截所有的业务方法)
Advice通知() Target目标对象 Weave织入 Introduction引入
用spring进行AOP编程:
1、引入jar文件
2、配置配置文件:引入AOP的命名空间
分享到:
相关推荐
Spring框架基础总结 一、Spring框架概述 Spring框架是一个开源的控制反转(IoC)和面向切面(AOP)的容器框架,旨在简化企业级Java应用的开发工作。Spring框架的核心价值在于其分层架构设计,使得开发者可以根据...
Spring个人总结,基于Annotation注解的方式开发,配置
这个“Spring基础培训PPT”应该会涵盖Spring的基本概念、核心模块以及如何在实际项目中应用。 **依赖注入** 依赖注入是Spring的核心之一,它允许开发者在运行时通过容器来管理对象之间的依赖关系,而不是在代码...
### Spring基础教学视频知识点概述 #### 一、Spring框架简介 - **定义**:Spring框架是一种轻量级的Java开发框架,它通过依赖注入(Dependency Injection, DI)和面向切面编程(Aspect-Oriented Programming, AOP...
Spring 基础教程.pdf Spring 是一个流行的 Java 框架,用于开发企业级应用程序。该框架提供了一个灵活的方式来开发基于 Java 的应用程序,涵盖了从简单到复杂的各种应用场景。本教程旨在指导读者快速入门 Spring ...
“知识点总结.xls”可能是一个整理好的Spring框架关键知识点的表格,可能包含了Spring的主要模块(如Core Container、Data Access/Integration、Web、AOP、Test等)、关键概念(如Bean、ApplicationContext、IoC容器...
Spring框架是一个全面的Java...总结来说,Spring框架通过其模块化的设计和丰富的功能提供了强大的基础设施,使得Java企业级应用开发更加高效和简洁。同时,它以POJO为基础的编程模型,促进了良好的编程习惯和测试能力。
总结:Spring基础教程将引导你深入了解这个框架的各项功能,从容器管理到AOP,再到Web开发和安全性。通过学习,你可以掌握如何利用Spring提升代码的灵活性和可维护性,以及如何构建健壮的Java企业级应用。阅读...
本篇笔记将详细讲解Spring框架的基础知识,包括其模块结构、配置文件的建立、配置文件的加载以及依赖注入的多种方式。 1. **Spring的模块结构** Spring框架由多个模块组成,主要包括: - **Core Container**:...
以下是对Spring4各个功能的jar包的详细总结: 1. **spring-core.jar**:这是Spring框架的基础,包含了IoC(Inversion of Control,控制反转)和DI(Dependency Injection,依赖注入)的核心实现。它提供了Bean工厂...
Spring MVC架构与DispatcherServlet配置 Spring MVC是一种流行的基于Java的Web应用框架,它提供了一个灵活的架构来开发...了解Spring MVC的架构和DispatcherServlet的配置是开发基于Spring MVC的Web应用程序的基础。
总结来说,Spring的IoC和AOP特性显著提升了软件开发的效率和灵活性,而其解决循环依赖问题的策略则展示了Spring框架的强大设计能力。理解和掌握这些知识点对于任何Spring开发者来说都是至关重要的。
总结,本项目"利用vscode创建的spring基础调试项目"主要涵盖了以下几个知识点: 1. Spring Boot的基础概念及其在Java开发中的作用。 2. 使用VSCode配置Java和Spring Boot的开发环境。 3. 创建Spring Boot项目,包括...
本总结笔记是Spring、Mybatis、SpringMVC的综合学习资源,涵盖了这些框架的基本概念、配置方式、优点与适用场景,以及它们各自组件和功能点的详细解释。适用于初学者入门学习,同时也可以作为面试时的参考资料,帮助...
- `handler.parse()`方法执行实际的解析,如在`ComponentScan`标签中,会设置扫描基础包,配置扫描过滤器,并使用`ClassPathBeanDefinitionScanner`进行扫描。 5. **扫描过程**: - 扫描过程中,`doScan()`方法会...
1,spring是一个开源的免费的框架(容器)。 2,spring是一个轻量级的,非入侵式的框架。 非入侵式:就是项目引入了这个框架之后,...总结:spring就是一个轻量级的控制反转(IOC)和面向切面编程(AOP)的框架。