一、spring创建对象的特点:

一、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

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值