spring基础部分在个人未完成servlet和JSP的学习时就涉及过,当是还迷迷糊糊的学完了 但效果微乎其微,如今建立在servlet和JSP的完结学习之后以及有了一定的实践经验之后,再回过头去看spring基础部分会更易理解且较之前学的时候不明之处也得到了大致解释。
所以 spring部分的知识。博主还是建议在学了servlet和JSP之后再去着手要更好一点,虽然其他的前辈会建议你直接着手于spring部分的一些框架学习——即学即用,但是这一的效果一般不好,因为大致都停留在表面。
个人总结部分:
这部分的总结 未涉及到注解方式,因为我个人不喜欢用注解方式去实现,并且注解方式可读性很低,所以以下总结除了全包含的是重点,第二点就是均使用的是传统方式来实现的。
一般在spring测试类:
ApplicationContext context=new ClassPathXmlApplicationContext(new String[]{"application.xml"});
category c=(category) context.getBean("c");
System.out.println(c.getName());
ApplicationContext context=new ClassPathXmlApplicationContext(new String[]{"application.xml"});
//这里使用 全局作用域ApplicationContext 旨在获取.xml文件的内容 其内容的传输利用的是字符串格式————new String();
Product p=(Product)context.getBean("p");
System.out.println(p.getName());
System.out.println(p.getCg().getName());
及其对应的XML文件:
<bean name="c" class="Categorys.category">
<property name="name" value="category1"></property>
</bean>
<bean name="p" class="Categorys.Product">
<property name="name" value="product1"/>
<property name="cg" ref="c"/><!--property中的name属性里的值是对应着该class里定义着的属性名称-->
</bean><!--这里相当于注入对象间嵌套,但是前提是建立在该class里有对其他类对象的定义
利用ref实现注入另一个对象 而值对应着注入对象的名称-->
其中就包含了dependency inject——依赖注入,property里name属性value值设置。
这是传统方式的依赖注入(DI) 及其 IOC,至于注解方式,麻烦且可读性不高,当作了解即可——需要在XML中加上<context:annotation-config/>
第二个重点就是AOP——面向切面编程:
主要利用三个类——测试类 核心业务类 周边功能类
public class ProductService {
public void dosomeService()
{
System.out.println("is there something wrong?!");
}
}
import org.aspectj.lang.ProceedingJoinPoint;
public class LoggerAspect {
public Object log(ProceedingJoinPoint joinPoint) throws Throwable{
System.out.println("start log:" + joinPoint.getSignature().getName());
Object object = joinPoint.proceed();
System.out.println("end log:" + joinPoint.getSignature().getName());
return object;
}
}
测试类:
ApplicationContext context=new ClassPathXmlApplicationContext(new String[]{"application.xml"});
ProductService s=(ProductService)context.getBean("s");
s.dosomeService();
三个类的编写都挺简单的,主要是XML文件里对核心业务功能,和周边功能的编织操作。
.xml:
<bean name="s" class="Aop.ProductService"/> <!-- 声明业务对象 -->
<bean id="loggerAspect" class="Aop.LoggerAspect"/><!-- 声明日志切面-->
<aop:config>
<aop:pointcut id="loggerCutPoint" expression="execution(* Aop.ProductService.*(..))"/><!--获取切点 也就是这个核心业务类-->
<aop:aspect id="logAspect" ref="loggerAspect"><!--切面操作 ref注入loggerAspect类在XML文件里的bean对象-->
<aop:around pointcut-ref="loggerCutPoint" method="log"/><!--切点注入使得在该类中获取指定方法log-->
</aop:aspect>
</aop:config>
注意<aop:pointcut <aop:aspect <aop:around <aop:config
这几个的包含关系 ,<aop:config 是把他们整个包含在内 如果在外不嵌套 会报错。
execution(* Aop.ProductService.*(…)) 的解释:
这表示对满足如下条件的方法调用,进行切面操作:
“ * ” 返回任意类型
类的路径(包名+类名).* 包名以
上述格式开头的类的任意方法
(…) 参数是任意数量和类型