Spring
1、@Autowired与@Resource都可以用来装配bean。都可以写在字段上,或写在setter方法上。
2、@Autowired默认按类型装配(属于spring规范),默认情况下必须要求依赖对象必须存在,如果要允许null 值,可以设置它的required属性为false,如:@Autowired(required=false) ,如果我们想使用名称装配可以结合@Qualifier注解进行使用
3、@Resource(属于J2EE复返),默认按照名称进行装配,名称可以通过name属性进行指定。如果没有指定name属性,当注解写在字段上时,默认取字段名进行按照名称查找,如果注解写在setter方法上默认取属性名进行装配。当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。
它们的作用相同都是用注解方式注入对象,但执行顺序不同。@Autowired先byType,@Resource先byName。
4.Spring的常用依赖
<dependencies> <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.2.0.RELEASE</version>
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
5.使用自动注解时,需要添加的xmlns(xml命名空间):xmlns:context="http://www.springframework.org/schema/context"
需要添加的web根目录: http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd ==还需要在bean.xml中添加标签context:annotation-config/==
(以上所有链接可以通过官方文档查询,学习去官方文档查询)
6.autowire是Bycalss优先,加上@Qualifier可以实现BYType+Byname,而Java中的原生注解@Resource则既不用引入头文件可以实现ioc托管管理,且Byname+ByType
7.@component:组件,放在类上,说明这个类被spring管理了
等价于:<bean id="user",class = "com.huang.pojo.User">
8.@Value
等价与:<bean id="user",class = "com.huang.pojo.User">
value = ?
9.@Component三个衍生注解
为了更好的进行分层,Spring可以使用其它三个注解,功能一样,目前使用哪一个功能都一样。
@Controller:web层
@Service:service层
@Repository:dao层
@scope(作用域)
singleton:默认的,Spring会采用单例模式创建这个对象。关闭工厂 ,所有的对象都会销毁。
prototype:多例模式。关闭工厂 ,所有的对象不会销毁。内部的垃圾回收机制会回收
10.小结
XML与注解比较
XML可以适用任何场景 ,结构清晰,维护方便
注解不是自己提供的类使用不了,开发简单方便
xml与注解整合开发 :推荐最佳实践
xml管理Bean
注解完成属性注入
使用过程中, 可以不用扫描,扫描是为了类上的注解
// context:annotation-config/ 作用:
进行注解驱动注册,从而使注解生效
用于激活那些已经在spring容器里注册过的bean上面的注解,也就是显示的向Spring注册
如果不扫描包,就需要手动配置bean
如果不加注解驱动,则注入的值为null!
11.SpringAOP SpringMVC必面试问到
12.动态代理中,之所以要在Client中的pih.setRent(host)中传入host,{Rent是接口类}
是因为其代理调用处理类中的代码是rent.getClass().getInterFaces(),这样传入了 host后就 实现了面向最终的Rent接口代码。 动态代理中的proxy都是在客户端中动态生成的。
13.使用aop需要导入aop约束
-
使用注解进行aop操作时,除了需要在配置文件中注入AnnotationPointCut类以外,还需要添加开启注释生命标签
-
执行的顺序是环绕前--方法执行前---方法执行---环绕后---方法执行后
16.aop:aspectj-autoproxy:说明
通过aop命名空间的<aop:aspectj-autoproxy />声明自动为spring容器中那些配置@aspectJ切面的bean创建代理,织入切面。 当然,spring 在内部依旧采用AnnotationAwareAspectJAutoProxyCreator进行自动代理的创建工作, 但具体实现的细节已经被<aop:aspectj-autoproxy />隐藏起来了
<aop:aspectj-autoproxy />有一个proxy-target-class属性,默认为false,表示使用jdk动态代理织入增强, 当配为<aop:aspectj-autoproxy poxy-target-class="true"/>时,表示使用CGLib动态代理技术织入增强。 不过即使proxy-target-class设置为false,如果目标类没有声明接口,则spring将自动使用CGLib动态代理。
-
回顾mybatis,需要在pom中加入解决静态过滤问题的依赖。
<build> <resources> <resource> <directory>src/main/java</directory> ==这里原来是resource,手动改java,以为使用Java包下的xml文件== <includes> <include>/*.properties</include> <include>/*.xml</include> </includes> <filtering>true</filtering> </resource> </resources> </build>
-
学习任何东西,包括代码,一定要潜心、细心,不可急于求成,要多动手

浙公网安备 33010602011771号