SPRING--Spring中IOC(反转控制) 和 AOP(面向方面编程)_ioc面向对象编程-程序员宅基地

技术标签: aop  string  frame框架  编程  ioc  class  object  

一、IOC
基本注入和集合注入


实体类Bean--配置文件(applicationContext)--测试类(Test)

1.1 实体Bean:属性+getter()方法+setter()方法
public class MyBean {
private String url;
private String name;
private String pwd;
private int age;
private List list;
private Set set;
private Map map;
private Properties prop;
public String getUrl() {
 return url;
}
public void setUrl(String url) {
 this.url = url;
}

//----此处省略其他属性的getter()和setter()方法----

1.2 Spring配置文件: applicationContext.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-3.0.xsd">
 <bean id="myBean" class="jorton.MyIoc.MyBean">
   <property name="url">
     <value>www.163.com</value>
   </property>
   <property name="name">
     <value>xuliang</value>
   </property>
   <property name="pwd" value="123456"></property>
   <property name="age">
     <value>25</value>
   </property>
   <property name="list">
     <list>
       <value>ibm</value>
       <value>sun</value>
       <value>oracle</value>
     </list>
   </property>
   <property name="set">
     <set>
       <value>music</value>
       <value>sleeping</value>
       <value>sports</value>
     </set>
   </property>
   <property name="map">
     <map>
       <entry key="mySister" value="yanmei"></entry>
       <entry key="myMother" value="wenxian"></entry>
       <entry key="myFather" value="guoxian"></entry>
     </map>
   </property>
 </bean>
</beans>



1.3 Test类:用于通过 ApplicationContext的方法getBean(..)获取myBean的属性值。
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
 public static void main(String[] args) {
   ApplicationContext ctx = new ClassPathXmlApplicationContext(
       "jorton/MyIoc/applicationContext.xml");
   MyBean myBean = (MyBean) ctx.getBean("myBean");
   System.out.println(myBean.getUrl());
   System.out.println(myBean.getName());
   System.out.println(myBean.getPwd());
   System.out.println(myBean.getAge());
   System.out.println(myBean.getList());
   System.out.println(myBean.getSet());
   System.out.println(myBean.getMap());
   System.out.println();
 }
}



---------------------------运行结果-----------------------------
www.163.com
xuliang
123456
25
[ibm, sun, oracle]
[music, sleeping, sports]
{mySister=yanmei, myMother=wenxian, myFather=guoxian}
---------------------------------------------------------------------

二、AOP(面向方面编程)
Aspect Oriented Programming
目标对象(TargetObject)和切面(TransactionAspect)--配置文件(applicationContext)--测试类(Test)

2.1 目标对象类(TargetObject)
public class TargetObject {
 public void add(){
   System.out.println("我添加了一些东西。。。");
 }
 public void update(){
 System.out.println("我更新了一些东西。。。");
 }
}



2.2 切面(TransactionAspect)
import org.aspectj.lang.ProceedingJoinPoint;

public class TransactionAspect {
 public void beforeMethod() {
   System.out.println("对象方法开始之前的操作。。。");
 }
 public void afterMethod() {
   System.out.println("对象方法之后的操作。。。");
 }
 public Object roundMethod(ProceedingJoinPoint pjp) throws Throwable {
   System.out.println("环绕方法上。。。");
   Object object = pjp.proceed();
   System.out.println("环绕方法下。。。。");
   return object;
 }
 public void throwMethod() {
   new RuntimeException();
   System.out.println("异常出现执行的操作。。。");
 }
 public void afterReturningMethod() {
   System.out.println("---afterReturning--的操作。。。");
 }
}



2.3 配置文件(applicationContext)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:aop="http://www.springframework.org/schema/aop" 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-3.0.xsd
 http://www.springframework.org/schema/aop
 http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
 <!-- 目标对象 -->
 <bean id="targetObject" class="tarena.myAop.TargetObject"></bean>
 <!-- 切面对象 -->
 <bean id="transactionAspect" class="tarena.myAop.TransactionAspect"></bean>
 <aop:config>
 <!-- 定义切面aspect-->
   <aop:aspect id="myAspect" ref="transactionAspect">
 <!--切入点pointcut-->
     <aop:pointcut id="transcut" expression="execution(* jorton.myAop.*.* (..))" />
 <!--定义通知--前置通知、后置通知、最终通知、环绕通知>
     <aop:before pointcut-ref="transcut" method="beforeMethod" />
     <aop:after pointcut-ref="transcut" method="afterMethod" />
     <aop:after-returning pointcut-ref="transcut"
       method="afterReturningMethod" />
     <aop:around pointcut-ref="transcut" method="roundMethod" />
   </aop:aspect>
 </aop:config>
</beans>

 

2.4 测试类(Test)

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class AOPTest {
 public static void main(String[] args){
   ApplicationContext ctx=new ClassPathXmlApplicationContext(
       "tarena/myAop/applicationContext.xml");
   TargetObject targetObject= (TargetObject) ctx.getBean("targetObject");
   targetObject.add();
 }
}


 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xiaoxiaocoder/article/details/8059458

智能推荐

YOLOV4结构图_yolov4系统架构图_HowHardYouAre的博客-程序员宅基地

CSPDarkNet主干网络结构图:CBM:conv+batchNorm+Mish(激活函数)整个网络构架:CSPDarkNet就是上面的结构CBL:conv+batchNorm+LeakyCBLi:conv+batchNorm+line_yolov4系统架构图

递归下降子程序实现LL(1)文法的语法分析_已知如下所示文法g[a],请写出每个产生式的predict集,并用c语言写出递归下降的语-程序员宅基地

这是一次编译原理的实验,总结输出一下:原理:对每一个非终结符(分别代表一个语法单位)按其产生方式结构构造相应的语法子程序,以完成非终结符号所对应的语法单位的分析和识别任务。其中终结符号产生匹配命令,而非终结符号则产生过程调用命令。因为文法可以递归,相应子程序也是递归的。1)示范,示例LL(1)文法如下:G[A]:(1)S::=pA(2)S::=qB(3)A::=cAd(4)A::=a(5)B::=..._已知如下所示文法g[a],请写出每个产生式的predict集,并用c语言写出递归下降的语

新员工入职培训感受总结-程序员宅基地

这个事情虽然已经过去快有一个月了,我把给我留下深刻意义的点点滴滴都写下来。 01:刚进入公司时,公司的行政人员会把公司的规章制度都会发给我,让我有个事先有个了解。02:行政人员会在会议室把重要注意事项口述一遍,防止你阅读不仔细,有些关键的事项没注意好的会特别强调一下,同时也会解答一些疑问。 03:指纹打卡等都会设置好,防止你作弊,你想让别人代替打卡等问题不容易发生了,其实一个公司...

深度学习初学者,如何下载常用公开数据集并使用呢?_如何下载数据集并运行_EP Fitwin的博客-程序员宅基地

深度学习初学者,如何下载常用公开数据集并使用呢?1.前言2.官方文档怎样看3.动手写代码4.如何可视化1.前言刚开始进行深度学习的时候,难免要用到一些公开数据集,现在闲来无事,记录一下如何快速下载一些经典数据集。通过官方文档学习,是一些大牛们挂在嘴边经常推荐的方法,那么我们本篇博客就从官方文档开始学习。因为我是做CV方向的,所以用TorchVision这个库举例。来自官网:This library is part of the [PyTorch](http://pytorch.org/) projec_如何下载数据集并运行

圆弧中点坐标值求解(二维平面&三维空间)(3.1增加三维部分)-①_三维空间圆弧中点坐标值_王嘉翀的博客-程序员宅基地

转自知乎:https://www.zhihu.com/question/22529500/answer/21670472%二维圆弧中点坐标syms r x0 x1 x y0 y1 y theta%eq1 = abs(x1*x-2*x*x0+x0^2+y1*y-2*y0*y+y0^2) == cos(theta)*(r^2);eq1 = x1*x-2*x*x0+x0^2+y1*y-2*y0*y+y0^2 == cos(theta)*(r^2);eq2 = sqrt((x-x0)^2+(y-y0)^2_三维空间圆弧中点坐标值

递归详解很简单 , 用递归实现99乘法表_用递归实现9999乘法表正反-程序员宅基地

1:普通实现99乘法表太简单,是个程序员都会,实现如下:package test.ms;public class Test99 { public static void main(String[] args) { for(int i=1; i<=9;i++){ for(int j=1; j<=i; j++){ System.out.print(j+"_用递归实现9999乘法表正反

随便推点

Hive实现wordCount程序-程序员宅基地

Hive实现wordCount程序a. 创建一个数据库,如create database word;b. 建表create external table word_data(line string) row format delimited fields terminated by '\n' stored as textfile location '/home/hadoop

java.lang.ClassCastException:org.hibernate.hql.ast.tree.SqlNode无法转换为org.hibernate.hql.ast.tree.FromR_org.hibernate.sql.ast.tree.sqlastnode-程序员宅基地

我正在尝试使用HQL查询更新记录,但我遇到了CastException.如果有人可以帮助我,我将非常感激.我已经检查了一段时间的互联网,但是找不到任何信息.如果您有关于此例外的更多信息,请告诉我.完整的错误消息返回:Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: org.hiber..._org.hibernate.sql.ast.tree.sqlastnode

JavaScript正则表达式替换字符串中图片地址(img src)的方法_js 正则替换html中的图片地址-程序员宅基地

今天开发中遇到一个问题:如何替换一段HTML字符串中包含的所有img标签的src值?开始想到的解决方法是:? 1 2 3 content.replace(/&lt;img [^&gt;]*src=['"]([^'"]+)[^&gt;]*&gt;/gi, function (match) { console.log(match);..._js 正则替换html中的图片地址

百练 / 2017研究生推免上机考试 C:肿瘤检测-程序员宅基地

题目来源:http://hljssyzx.openjudge.cn/2016/47/肿瘤检测-----------------------------------------------------总时间限制: 1000ms 内存限制: 65536kB描述一张CT扫描的灰度图像可以用一个N*N(0 &lt; N &lt;=100)的矩阵描述,矩阵上的每个点对应一个灰度值(整数),其取值范围是0-2...

【Pop_OS】Python运行环境配置_pop!_os mirror-程序员宅基地

Pop!_OS Python运行环境配置1. 更改环境变量Pop!_OS 默认自带了pyhton3,使用命令python3可运行python,此处更改环境变量使python命令直接运行python3echo alias python=python3 >> ~/.bashrc使环境变量生效source ~/.bashrc2.Pip换源首先在用户目录创建.pip目录mkdir ~/.pip创建并编辑pip.config文件vim ~/.pip/pip.conf将下面的内_pop!_os mirror

Centos7下安装Anaconda3+tensorflow-程序员宅基地

在学习linux开发过程中新鸟遇到不少问题,但是又苦于没有师傅带,出了问题只能google来解决,但是网上的资源真的有很多坑,很多,很多。在centos7单独安装python3.6进行开发时,遇到一个问题苦苦搜寻一天没有解决,无奈出现了本篇本章。问题:在单独安装python3.6进行开发时,当导入import matplotlib包进行开发时,会出现No module named '_tkinte...

推荐文章

热门文章

相关标签