码迷,mamicode.com
首页 > 编程语言 > 详细

Spring 笔记

时间:2017-06-27 23:31:41      阅读:310      评论:0      收藏:0      [点我收藏+]

标签:let   stun   param   ready   ==   prototype   username   request   cto   

1, 新建包或导入工程错误提示:
  The type javax.servlet.ServletContext cannot be resolved. It is indirectly referenced from required .class files。
  解决方法:在安装的tomcat下的lib目录里面找到servlet-api.jar包,导入项目下的lib文件夹中即可。

2,Could not load the Tomcat server configuration at /Servers/Tomcat v7.0 Server at localhost-config. T

  Eclipse新建Server时,会在 当前workspace目录下新建 /Servers/Tomacat v7.0 Server at localhost-config目录,
  然后将/opt/ apache-tomacat-7.0.59/conf 目录下的所有文件拷贝到这里。Eclipse没有访问它的权限,所以无法拷贝,那么Server自然创建失败。

  解决方法:删了重建

3,@RequestParam传参解决中文乱码
1)post方法
@RequestMapping(value="login.do", produces="text/html;charset=utf-8")
-->login.do 表单提交地址

2)get方式
String user=new String(username.getBytes("iso-8859-1"),"utf-8");
String pwd=new String(password.getBytes("iso-8859-1"),"utf-8");
-->注意,如果进来的是中文未乱码,此方法转换返回 ????

4,服务器启动
Result Maps collection already contains value forxxx”的解决方案
-->Eclipse编译了一份在bin目录下,将bin目录或者WEB-INF下class目录清空即可

5,注入null和空字符串值
<bean id="student" class="com.spring.entity.Student">
<property name="stuName"> <null /> </property>
</bean>

<bean id="student" class="com.spring.entity.Student">
<property name="stuName"> <value></value> </property>
</bean>

6,Bean的作用域
<bean id="student" class="com.spring.entity.Student" scope="singleton"/>
singleton : 默认值,Spring以单例模式创建bean的实例,即容器中该bean的实例只有一个
prototype : 每次从容器中获取bean时,都会创建一个新的实例
request : 用于web应用环境,针对每次http请求都会创建一个实例
session : 用于web应用环境,同一个会话共享用一个实例,不同的会话使用不同的实例
global session : 仅在Portlet的web应用中使用,同一个全局会话共享一个实例;对于非Portlet环境,等同于session
===>使用 request,session,global session 需要在 web.xml 中配置一个请求监听器
<listener>
<listener-class>
org.springframework.web.context.request.RequestContextListener
</listener-class>
</listener>

7,注解
@Component("xxxx") : 标注一个普通的Spring Bean类
@Repository("xxxx") : 用于标注DAO类
@Service("xxxx") : 用于标注业务类
@Controller("xxxx") : 用于标注控制器类

添加命名空间:
xmlns:context="http://www.springframework.org/schema/context"
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd"
<!-- 扫描包中注解标注的类 -->
<context:component-scan base-package=" 包名 "></context:component-scan>

@Scope() : 指定bean的作用域
@Autowired : 自动装配

8,AOP aspect oriented programming
增强 advice
切入点 pointcut
连接点 joinpoint
切面 aspect
代理 proxy
目标对象 target
织入 weaving
示例:
<!-- 声明切面类 -->
<bean id="testLogger" class="com.spring.logger.TestLogger" />
<aop:config>
<aop:pointcut expression="execution(* com.spring.service.impl.*.*(..))"
id="pointcut"/>
<aop:aspect ref="testLogger">
<aop:before method="beforeLogger" pointcut-ref="pointcut"/>
</aop:aspect>
</aop:config>

execution : 切入点指示符,括号中是切入点表达式
public * addUser(com.entity.User) : "*" 表示匹配所有类型的返回值 , 方法名( 参数 )
public void *(com.entity.User) : "*" 表示匹配所有方法名
public void addUser(..) : ".." 表示匹配所有参数个数和类型
* com.service.*.*(..) : 表示匹配 com.service 包下所有类的所有方法
* com.service..*(..): 表示匹配 com.service 包及其子包下所有类的所有方法
9,增强处理类型
Before : 前置增强处理,在目标方法前织入增强处理
AfterReturning : 后置增强处理,在目标方法正常执行(不出现异常)后织入增强处理
AfterThrowing : 异常增强处理,在目标方法抛出异常后织入增强处理
After : 最终增强处理,不论方法是否抛出异常,都会在目标方法最后织入增强处理
Around : 环绕增强处理,在目标方法的前后都可以织入增强处理
示例:
public void afterReturningLogger(JoinPoint jp, Object result){
执行方法的名称-->jp.getSignature().getName()
方法的参数-->jp.getArgs()[0]
方法返回的值:"+result
===><aop:after-returning method="afterReturningLogger"
pointcut-ref="pointcut" returning="result"/>
获取方法返回值需加 returning 属性

>环绕增强 : 第一个参数必须是 ProceedingJoinPoint ,并且使用 pjp.proceed() 调用目标方法
public void around(ProceedingJoinPoint pjp) throws Throwable{
System.out.println("aop:around 方法");
System.out.println("aop:around 目标方法前执行----------------->");
pjp.proceed();
System.out.println("aop:around 目标方法后执行----------------->");
}
---><aop:around method="around" pointcut-ref="pointcut"/>

10,设值注入 和 构造注入
设值注入 : 通过setter访问器实现,灵活性好,时效性差
构造注入 : 通过构造方法实现,灵活性差,时效性好

设值输入示例:
public void setStudentDao(StudentDao studentDao) {
this.studentDao = studentDao;
}

<bean id="studentDaoImpl" class="com.spring.dao.impl.StudentDaoImpl" />
<bean id="studentServiceImpl" class="com.spring.service.impl.StudentServiceImpl">
<property name="studentDao">
<ref bean="studentDaoImpl"/>
</property>
</bean>
构造方法注入:
public GradeServiceImpl(GradeDao gradeDao) {
this.gradeDao = gradeDao;
}

<bean id="gradeDao" class="com.spring.dao.impl.GradeDaoImpl"></bean>
<bean id="gradeServiceImpl" class="com.spring.service.impl.GradeServiceImpl">
<!-- 使用构造方法为 gradeService 的 gradeDao 属性赋值-->
<constructor-arg>
<ref bean="gradeDao"/>
</constructor-arg>
</bean>

调用实例工厂方法创建Bean
factory-bean: 该属性的值为工厂Bean的id。
factory-method: 该属性指定实例工厂的工厂方法。

<bean id="dateFormat" class="java.text.SimpleDateFormat">
<constructor-arg value="yyyy-MM-dd" />
</bean>

<bean id="grade" class="com.spring.entity.Grade">
<property name="date">
<bean factory-bean="dateFormat" factory-method="parse">
<constructor-arg value="2017-06-06" />
</bean>
</property>
</bean>


11,使用 p 命名空间注入bean的属性
property 注入:
<bean id="studentServiceImpl" class="com.spring.service.impl.StudentServiceImpl">
<property name="studentDao">
<ref bean="studentDaoImpl"/>
</property>
</bean>

p命名: 添加 xmlns:p="http://www.springframework.org/schema/p"
<bean id="studentServiceImpl" class="com.spring.service.impl.StudentServiceImpl"
p:studentDao-ref="studentDaoImpl" />

注意:
对于直接量(基本数据类型,字符串)属性,使用方式如下:
p:属性名 = "属性值"
对于引用Bean的属性,使用方法如下:
p:属性名-ref = "bean的ID"
12,使用内部bean
如果一个bean组件仅在一处使用,可以把它定义为内部bean
<bean id="studentServiceImpl" class="com.spring.service.impl.StudentServiceImpl">
<property name="studentDao">
<bean class="com.spring.dao.impl.StudentDaoImpl"/> <--------
</property>
</bean>

13, bean 和 local 的区别
<property name="studentDao">
<ref bean="studentDaoImpl"/> 或 <ref local="studentDaoImpl"/>
</property>
local属性只能在同一个配置文件中检索bean的ID,而使用bean属性可以在其他配置文件中检索ID

14,注入集合类型
<property name="hobbies">
<list>
<value>xxxx</value> 或 <ref bean=""/>
<value>xxxx</value>
</list>
</property>

<property name="hobbies">
<set>
<value>xxxx</value> 或 <ref bean=""/>
<value>xxxx</value>
</set>
</property>

<property name="hobbies">
<map>
<entry>
<key> <value>xxxx</value> </key>
<value>xxxx</value>
</entry>
<entry>
<key> <value>xxxx</value> </key>
<value>xxxx</value>
</entry>
</map>
</property>

====> <entry key="xx" value="xxxx" /> 简写形式

Properties类型:
<property name="hobbies">
<props>
<prop key="xxx">xxx</prop>
<prop key="xxx">xxx</prop>
</props>
</property>

15,使用接口实现增强方法
implements AfterReturningAdvice
implements MethodBeforeAdvice
implements MethodInterceptor
示例:
public class ServiceAdvice implements MethodBeforeAdvice{}

<bean id="serviceBeforeAdvice" class="com.spring.logger.ServiceAdvice"></bean>
<aop:config>
<aop:pointcut expression="execution(* com.spring.service.impl.GradeServiceImpl.*(..))"
id="gradeservice_cut"/>
<aop:advisor advice-ref="serviceBeforeAdvice" pointcut-ref="gradeservice_cut"/>
</aop:config>

使用POJO普通类实现增强方法 (推荐)

public class TestLogger {}

<bean id="testLogger" class="com.spring.logger.TestLogger" />
<aop:config>
<aop:pointcut expression="execution(* com.spring.service.impl.StudentServiceImpl.*(..))"
id="pointcut"/>
<aop:aspect ref="testLogger">
<aop:around method="around" pointcut-ref="pointcut"/>
</aop:aspect>
</aop:config>

15,ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");

两种方法:
a. ClasspathResource res = new ClasspathResource(“a.xml,b.xml,……”);
多个资源文件路径之间可以是用” ,; /t/n”等分隔。
b. ClasspathResource res = new ClasspathResource(newString[]{“a.xml”,”b.xml”,……});


16,bean组件, 通过无参构造方法实例化对象,setter方法设值

Spring 笔记

标签:let   stun   param   ready   ==   prototype   username   request   cto   

原文地址:http://www.cnblogs.com/sjmbug/p/7087344.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!