spring学习的方面总的分为以下几个方面:
一.ioc容器
二.aop面向切面的编程
三.spring对事务的管理
spring配置文件放在类路径下,可直接使用
ApplicationContext applicationContext=new ClassPathXmlApplicationContext(“springaop.xml”);
其中applicationcontext是接口
针对ioc容器的心得:比较常用的知识点为 @Autowired 的使用
@Autowired是根据类型进行自动装配的,如果需要按名称进行装配,则需要配合@Qualifier
bean的配置,
以及扫描的包(@controller,@Component…)
Spring加上@service等注解会自动new出相应的对象,调用其构造函数。
Spring依赖注入
默认是单例模式,多处@autowired都是同一个对象
多例模式@Scope(“prototype”) 非同一个对象
还有一些@bean等方便的操作
<context:component-scan base-package="com.cg.beans"></context:component-scan>
面向切面编程(aop):
@aspect
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
它的好处是降低代码的耦合度,使核心代码比例增高;比如添加日志功能,如果将日志代码加入到原有功能上,耦合度就会增强而且不利于维护,后续如果继续添加其他功能的话,原本的核心代码的比例就会很低,利用切面编程就可以解决这个问题,在不需要改动原先代码的基础上添加新的功能,
spring aop提供了@before,@after 等注解即前置通知,后置通知还要返回通知等
@Before("execution(public int com.cg.beans.Calculator.*(int,int))")
切面的优先级则用@order(1)注解括号里面的数字越小优先级越高
读取配置
@Configuration
//读取配置文件
@PropertySource("classpath:mytest.properties")
public class ConfigTest {
@Bean
//根据前缀读取相应的值
@ConfigurationProperties(prefix="test")
public ConfEntity getConf(){
//在返回的时候将值注入到相应的对象中
return new ConfEntity();
}
@Bean("mapConf")
@ConfigurationProperties(prefix="test")
public Map<String, String> getConfMap(){
//在返回的时候将值注入到相应的对象中,可以是Map
return new HashMap<String, String>();
}
//当有相同的对象需指明名字
@Bean("mapConf2")
@ConfigurationProperties(prefix="test2")
public Map<String, String> getConfMap2(){
return new HashMap<String, String>();
}
}