Spring学习大杂烩(待续)

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的命名空间,

转载于:https://www.cnblogs.com/yanzhexian/archive/2010/08/17/1801180.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/380937.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

将字符串全部转为大写或者小写

1、全部转大写&#xff0c;使用toUpperCase()方法&#xff1b;全部转小写&#xff0c;使用toLowerCase()方法 public class StringUpperAndLowerReview {public static void main(String[] args) {String s "Hello jaVa";System.out.println(s.toUpperCase());Syst…

是网关吗_什么是边缘控制器?就是IPC+PLC+网关吗?今天就拆开一个来看看

边缘计算作为云计算的一项重要补充&#xff0c;在构建互联工厂中的作用正越来越受到重视。边缘计算实现了数据在网络边缘侧的分析、处理与储存&#xff0c;不仅减少了对云端依赖&#xff0c;也提高了数据的安全性。不管是因为云计算本身&#xff0c;还是网络传输受限&#xff0…

删除字符串的前置或者后置空格

解决方法&#xff1a;String类的trim()方法提供了此功能&#xff0c;trim()方法可以删除个行开头的空格和TAB符 public class TrimReview {public static void main(String[] args) {String s " xxxx ";System.out.println(s.trim());} }结果&#xff1a;

Oracle数据库的备份

这两天要用oracle的数据备份&#xff0c;在网上找了找例子。给大家贴出来看看。PS: 选择数据库中所有的表的SQL语句SELECT * FROM DBA_TABLES WHERE OWNER&#xff08;填用户名&#xff09;;------------------------------------------------------------------------------ 一…

python 网格交易源码下载_GitHub - xiongyixiaoyang/grid-trading: 网格交易(期货) ,基于网格交易方法的交易策略...

# codingutf-8from __future__ import print_function, absolute_import, unicode_literalsimport numpy as npimport pandas as pdfrom gm.api import *本策略首先计算了过去300个价格数据的均值和标准差并根据均值加减1和2个标准差得到网格的区间分界线,并分别配以0.3和0.5的…

python3 安装Crypto 出现的问题

python3 import Crypto 失败的解决办法 &#xff08;AES对称加密使用 模块&#xff09; # 先导入所需要的包 pip3 install Crypto # 再安装pycrypto pip3 install pycrypto from Crypto.Cipher import AES # 就成功了 ------------------------------- python3安装crypto出…

基于Windows 7旗舰版搭建WinCE6.0开发环境的过程

首先感谢JeffreyLi提供了更简便的安装WinCE6.0 R3的方法&#xff0c;今天验证过了&#xff0c;确实比我之前整理的《WinCE6.0 R3的安装步骤》方便很多&#xff0c;十分感谢&#xff01; 为了方便大家参考&#xff0c;重新整理的安装步骤如下&#xff1a; *Please install the …

随机邮箱_msgsafe - 一个处于半死不活状态的加密邮箱

一个半死不活的、还算有点意思的、支持端到端加密的免费邮箱&#xff0c;目前看来。邮箱简介好像自从Protonmail火了之后&#xff0c;支持端到端加密的邮箱越来越多&#xff0c;但大多有一个共同点&#xff1a;后缀都不怎么样。msgsafe.io于2016年建立&#xff0c;当年为了推广…

Spring环境搭建

1、导包&#xff08;此处省略如何下载Spring文件&#xff09; 打开我们的spring-framework-4.2.3.RELEASE文件&#xff08;这里我们只导入最基础的几个包&#xff09;&#xff0c;再打开libs文件&#xff1a; 找到以下几个包&#xff1a; 复制粘贴到eclipse中去&#xff0c;如…

win下python2,3和pip2,3双版本共存

在python环境中&#xff0c;有些开发需要依赖于python3的安装包&#xff0c;然而有些又需要python2才能运行。索性将python2和python3同时安装&#xff0c;并配置好各自的运行方式&#xff0c;以及各版本的pip。方便在需要安装工具包的时候&#xff0c;能准确定位到相应的版本。…

MFC 弹出对话框MessageBox

原来是这样的&#xff1a;AfxMessageBox(message); 就这么简单……转载于:https://www.cnblogs.com/youring2/archive/2010/08/25/1807719.html

python3 Crypto使用出现的问题

python3 安装Crypto 出现的问题 python3 import Crypto 失败的解决办法 &#xff08;AES对称加密使用 模块&#xff09; # 先导入所需要的包 pip3 install Crypto # 再安装pycrypto pip3 install pycrypto from Crypto.Cipher import AES # 就成功了 --------------------…

基于证书的WCF安全开发详解

基于证书的WCF安全开发详解 前几天成功建立起了一套基于证书的安全的WCF服务&#xff0c;很兴奋&#xff0c;现在做一下总结&#xff0c;希望大侠们指点&#xff0c;也希望能帮助到一些菜鸟&#xff0c;哈哈。 一、安全通信的基本过程 这里只做定性的理论上的分析&#xff0c;因…

h5分享到朋友圈_微信朋友圈创意招聘广告制作方法 H5模板

微信朋友圈招聘广告发布出去那么久了&#xff0c;为啥还是没有求职者前来应聘呢&#xff1f;那么一定是你的招聘广告不够创意&#xff0c;所以没能吸引求职者的目光。如何才能制作一个有创意更吸引求职者眼球的招聘广告呢&#xff1f;现在你只需通过制作平台的一个模板&#xf…

如何禁用win7的ASLR

ASLR&#xff08;Address space layout randomization&#xff09;使可执行程序的装载地址有一个随机偏移。虽然偏移值不大&#xff0c;但是会给内核级调试带来麻烦&#xff0c;尤其是离线查找符号表时。 经典的方法是用注册表项HKLM\SYSTEM\CurrentControlSet\Session Manage…

spring的Bean属性

我们在配置spring文件时&#xff0c;会遇到配置bean属性的问题&#xff0c;bean的作用很简单&#xff0c;就是使用该元素描述需要spring容器管理对象 <?xml version"1.0" encoding"UTF-8"?> <beans xmlns:xsi"http://www.w3.org/2001/XML…

看了本书《答案在你心中》里面的很多问题都蛮有意思!!!

写完程序之余看看人生。想一想一些或许现在没有遇到&#xff0c;但将来某天会遇到的问题&#xff01;这本书总体还不错。摘几段看看&#xff01;&#xff01;每个人的答案都不一样&#xff01;&#xff01;哈哈《答案在你心中》为了心爱的人1 为了心爱的人&#xff0c; 你愿不愿…

还原特别慢_正手攻球最容易忽略的一步——还原

你距离标准的正手攻球可能只差一步。许多朋友在练习正手攻球一段时间以后&#xff0c;动作框架基本形成&#xff0c;有蹬转&#xff0c;能发力&#xff0c;肩部大臂都能放松&#xff0c;甚至能在击球的瞬间可以用上手指手腕的力量。但是录完视频一看&#xff0c;好像总是差那么…

Could not open lock file /var/lib/apt/lists/lock - open (13: Permission denied)

Ubuntu使用教程&#xff1a;E: 无法获得锁 /var/lib/apt/lists/lock - open (11 资源临时不可用) 查看一下是否有使用apt-get的程序,终端输入:ps -aux,找到使用apt-get的程序(最后一列),查看其PID号,然后杀死其进程,输入sudo kill PID. 用sudo apt-get update时出现“ E: 无法…

Spring三种对象创建方式

1、创建方式1&#xff1a;无参构造 我们先创建一个User类&#xff1a; public class User {private String name;private int age;public User() {System.out.println("无参构造方法");}public String getName() {return name;}public void setName(String name) {t…