spring

DAY01

创建项目

   module文件 
			src  
					main 
							java : 实例对象(pojo) 
							resources :  spring管理的bean池文件
					test  --- -测试文件
							测试类:用注解时: 是返回值必须为:void 

java : 实例对象(pojo) :

/**怎么实例化对象:

  • 1. 得到他的对象 
    
  •    			 xxx.getInstance(实例化对象)   
    
  •  2. 拿到它的类型
    
  •   #得到他的对象,并拿到他的类型,得到的对象是<<<<<<完整的>>>>实例化对象#
    
工厂模式()

public class 类名 implements FactoryBean
{
@Override
public Calendar getObject() throws Exception {
return null;
}

@Override
public Class<?> getObjectType() {
    return null;
}
	}

resources : spring管理的bean池文件

<bean id="calendar" class="com.jt.factory.StaticFactory" factory-method="getCalendar" />
<!-- 实例类中,非静态资源(没有static修饰的资源的): 调用方式:通过对象调用方法 -->
<bean id="instance" class="com.jt.factory.InstanceFactory" />
 <bean id="calendar1"  factory-bean="instance"  factory-method="getCalendar"/>
   <!-- 工厂模式: 调用方式 -->
<bean id="springFactory" class="com.jt.factory.SpringFactory" />

关于注解的说明

1).@Controller 用来标识Controller层的代码 相当于将对象交给Spring管理
2).@Service 用来标识Service层代码
3).@Repository 用来标识持久层
4).@Component 万用注解

关于属性的注解

  • 关于注解的说明
  • @Autowired: 可以根据类型/属性名称进行注入 首先按照类型进行注入如果类型注入失败,则根据属性名称注入
  • @Qualifier: 如果需要按照名称进行注入,则需要额外添加@Qualifier
  • @Resource(type = “xxx.class”,name=“属性名称”)
  • 关于注解补充: 由于@Resource注解 是由java原生提供的,不是Spring官方的.所以不建议使用
    上述的属性的注入在调用时 自动的封装了Set方法,所以Set方法可以省略不写

关于编辑配置类

  • @Configuration //标识我是一个配置类 相当于application.xml
    //设定包扫描的路径

  • @ComponentScan(“com.jt”)//如果注解中只有value属性 则可以省略

  • @PropertySource

  • @PropertySource(“classpath:/user.properties”)
    注解说明: @PropertySource 作用: 加载指定的pro配置文件 将数据保存到Spring容器中

  • @Value
    java @Value(123) 将123值赋值给Id @Value(" u s e r . i d " ) 在 S p r i n g 容 器 中 查 找 k e y = u s e r . i d 的 数 据 . 通 过 {user.id}") 在Spring容器中查找key=user.id的数据.通过 user.id")Springkey=user.id.{}语法获取

Spring容器管理业务数据@Bean注解

@Bean作用
通过该注解,可以将业务数据实例化之后,交给Spring容器管理. 但是@Bean注解应该写到配置类中.

Spring注解模式执行过程

1).当程序启动Spring容器时 AnnotationConfigApplicationContext 利用beanFactory实例化对象
2).根据配置类中的包扫描开始加载指定的注解(4个). 根据配置文件的顺序依次进行加载
3).当程序实例化Controller时,由于缺少Service对象,所以挂起线程 继续执行后续逻辑.
当构建Service时,由于缺少Dao对象,所以挂起线程 继续执行后续逻辑.
当实例化Dao成功时,保存到Spring所维护的Map集合中. 执行之前挂起的线程.
所以以此类推 所有对象实现封装.最终容器启动成功

关于AOP名词介绍

1).连接点: 用户可以被扩展的方法
2).切入点: 用户实际扩展的方法 (哪个方法可以扩展,就给他加个自定义主角
3).通知: 扩展方法的具体实现 (加入的内容)
4).切面: 将通知应用到切入点的过程

通知类型(必会)

before: 在目标方法执行之前执行
afterReturning: 在目标方法执行之后返回时执行
afterThrowing: 在目标方法执行之后,抛出异常时执行
after: 无论程序是否执行成功,都要最后执行的通知
around: 在目标方法执行前后 都要执行的通知(完美体现了动态代理模式)
功能最为强大 只有环绕通知可以控制目标方法的执行
关于通知方法总结:
1.环绕通知是处理业务的首选. 可以修改程序的执行轨迹
2.另外的四大通知一般用来做程序的监控.(监控系统) 只做记录

切入点表达式

概念:当程序满足切入点表达式,才能进入切面,执行通知方法.

1.bean(“bean的ID”) 根据beanId进行拦截 只能匹配一个
2.within(“包名.类名”) 可以使用通配符*? 能匹配多个.
粒度: 上述的切入点表达式 粒度是类级别的. 粗粒度.
3.execution(返回值类型 包名.类名.方法名(参数列表…))
粒度: 控制的是方法参数级别. 所以粒度较细. 最常用的.
4.@annotation(包名.注解名) 只拦截注解.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值