一、spring创建对象的特点:
scope=“singleton” 是单例模式,读取配置文件就创建,只创建一次
 lazy-init="true"只对 scope="singleton"有用,目的是读取配置文件不创建对象。
 scope=“prototype” 每次创建都是新的,读取配置文件不创建对象,getBean(“”)时候创建。boy.name=“tom”;
 boy2.name=“mike”;
 System.out.println(boy==boy2);//true 一个
 System.out.println(boy.name+"\t"+boy2.name);true
 mike mike当这个对象有自己的属性,不能用单例。如果没有属性或者属性可以是大家共用的,这个时候可以用单例。
spring管理controller,service,dao,都是单例。
二、实例化bean的三种方式
1、默认构造方法
2、静态工厂
(1)public class BoyFactory {
 public static Boy getBoys(){
 return new Boy();
 }
 }(2)spring.xml
 
class=“工厂的包名、类名”
(3)调用
Boy b=(Boy)bean.getBean(“boy2”);
 b.show();3、实例工厂
(1)public class BoyFactory2 {
 public Boy getBoys(){
 return new Boy();
 }
 }(2)spring.xml
<bean id="boyFactory2" class="com.factory.BoyFactory2"></bean>
   <bean id="boy3" factory-bean="boyFactory2" factory-method="getBoys"></bean>(3)测试
Boy b=(Boy)bean.getBean(“boy3”);
 b.show();三、属性的注入
A、基本属性注入
(1)public class Boy {
 String name;
 int age;public void setName(String name) {
	this.name = name;
}

public void setAge(int age) {
	this.age = age;
}(2)spring.xml
B、对象类型属性注入
(1)public class Girl {
 String name;public String getName() {
	return name;
}

public void setName(String name) {
	this.name = name;
}}
(2)
public class Boy {
 Girl girl;public void show(){
 System.out.println(“show=”+name+"\t"+age+"\t"+girl.getName());
 }}
(3)、
 **** **** 
练习:
有一个Person类,里面name,age,Cat属性
还有一个Cat类,里面有name,type
通过spring注入,有一个人名字是mike,属性一只猫,猫的名字是huahua
集合注入
private Listtels;
2、spring.xml
 123 456 789 
作业:
有一个UsersMysqlDao类,里面有一个无参数,无返回值的save方法,输出mysql save
有一个UsersOraDao类,里面有一个无参数,无返回值的save方法,输出oracle save
有一个UsersService类,有一个dao属性,根据用户的不同需要,分别实现mysql和oracle的save方法,体验切换不同的保存方法
四、注解方式
<context:component-scan base-package="com.dao.impl,com.service"></context:component-scan>1、一共4种
@Component 指定把一个对象加入IOC容器,不属于下面的三个层
@Repository 作用同@Component; 在持久层使用,数据层
@Service 作用同@Component; 在业务逻辑层使用
前三个可以互换,本身就是创建
@Controller 在控制层使用
 @Autowired 自动注入,按照类型
@Autowired
 @Qualifier(value=“usersOraDao”)//按照id去注入
 IUserDao dao;//@Autowired 默认是按照接口类型匹配
 //@Qualifier(value=“usersOraDao”) 一个接口多个实现类,指定实现类的名字。
 @Resource(name=“usersOraDao”)//默认就是id名字匹配。静态代理模式:
1、接口,定义要代理方法。
2、有一个代理类,实现接口,里面接口类型属性
3、有一个被代理类,实现接口
4、测试
AOP
业务代码与关注点代码分离,好处?
 --à 关注点代码写一次即可;
 -à开发者只需要关注核心业务;
 -à运行时期,执行核心业务代码时候动态植入关注点代码; 【代理】
(1)注解方式:
spring.xml
<context:component-scan base-package="com.dao,com.app"></context:component-scan>
               <!-- 支持aop注解方式 -->
                  <aop:aspectj-autoproxy></aop:aspectj-autoproxy>(2)切面类
@Aspect//切面
 @Component//创建
 public class App {@Pointcut("execution(* com.dao.*.*(..))")//  com.dao所有方法 * 所有返回值,.*.*所有类,所有方法,(..)参数任意
public void method(){
	
}
@Before("method()")//前置通知
public void before(){
	System.out.println("开启事务,前置通知");
}
@After("method()")//后置通知,执行方法之后
public void after(){
	System.out.println("关闭事务,最终通知");
}
@AfterReturning("method()")
public void back(){
	System.out.println("返回后");
	
}
@AfterThrowing("method()")
public void yichang(){
	System.out.println("异常通知");
}
@Around("method()")
public void around(ProceedingJoinPoint p) throws Throwable{
	System.out.println("环绕前------");
	p.proceed();//方法是分割线
	System.out.println("环绕后----------");
}}
被拦截类
@Repository
 public class UsersDao {
 public void save(){System.out.println("save");
	
}
public void update(){
	//
	System.out.println("update");
	System.out.println(10/0);
	//System.out.println("关闭事务");
}}
servlet2种跳转方式:
请求转发:
1、地址栏的地址和请求地址一致
2、request范围内的值在
重定向:
1、地址栏的地址和请求地址不一致
2、request范围内的值不存在
3、可以定向到项目外的地址
页面路径:
/user/login.action 认为是绝对路径,http://localhost:8080+ /user/login.action
user/login.action 相对路径,http://localhost:8080/web06303/ + user/login.action
Controller是请求转发跳转,省掉/项目名.
1、springMVc的流程:
页面提交请求.action,web.xml —DispatcherServlet 同时加载spring.xml, 通过映射器和适配器,找到action的方法, model
页面带值,视图解析器跳转页面。
2、springMVC的项目步骤:
(1)、jar
(2)、web.xml加入
 DispatcherServlet org.springframework.web.servlet.DispatcherServlet contextConfigLocation classpath:spring.xml 1 DispatcherServlet *.action CharacterEncodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8 
(3)、spring.xml
<context:component-scan base-package="com.controller"></context:component-scan>
<!-- 视图解析器,会在返回的字符串前后加上前缀和后缀 -->
<bean
	class="org.springframework.web.servlet.view.InternalResourceViewResolver">

	<property name="suffix" value=".jsp" />
</bean>(4)Controller
@Controller
 @RequestMapping(“user”)
 public class ComputerAction {
 @RequestMapping(“computer.action”)
 public String com(int num1,int num2,String flag,Model model){作业:
重新搭建springMVC项目,然后做addDept.jsp
仿照数据库dept表3个字段,然后请求action获取页面的值,页面进行为空校验。
做一个页面,页面有
单选按钮权限 管理员 普通员工。
复选框 技能 Java c html ,
下拉框 城市 北京、上海、大连
文本域 介绍 ,
每一个组件都有默认值
.
作业:用jq的ajax请求完成:
1登录,用户名和密码是tom,123,显示登录成功sec,否则显示登录失败fail
2、一个文本框输入用户名,如果是tom,在页面上显示不可用或者显示不可用的图片,
如果不是tom,显示可用或者可用的图片
返回对象的json
1、jar
2、spring.xml 配置json适配器
3、@ResponseBody