前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring学习笔记

Spring学习笔记

作者头像
曼路
发布2018-10-18 15:18:32
3520
发布2018-10-18 15:18:32
举报
文章被收录于专栏:浪淘沙

Spring

1、第一天

1.Spring是一个开源框架,主要优势之一是其分层架构,分层架构允许使用者选择使用哪一个组件. Spring的核心是IOC(控制反转)和AOP(面向切面)。 2.IOC:创建类的对象的时候,使用ioc实现对象创建,通过配置文件方式创建对象。 底层原理技术:xml配置文件;dom4j解析xml文件;工厂模式;反射   AOP:不通过修改源代码方式增强类里面的方法。 3.spring框架需要的包:beans;core;context;SpEL;commons-logging-1.2; log4j-1.2.16; 4.配置文件:bean.xml   放到src下。   约束内容:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
	<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
   </beans>

5.Spring的Bean管理:   (1)创建对象(bean实例化)   (2)设置类里面属性值 6.类的实例化:   (1)使用类的无参构造: 

代码语言:javascript
复制
<bean id="user" class="com.edu.nuc.ioc.User"></bean>

  (2)使用静态工厂创建:

代码语言:javascript
复制
<bean id="userByFactory_1" class="com.edu.nuc.factory.Bean2Factory_1" factory-method="getUser"></bean>

  (3)使用实例工厂创建

代码语言:javascript
复制
 <bean id="userByFactory_2" class="com.edu.nuc.factory.Bean2Factory_2"></bean>
	<bean id="user_2" factory-bean="userByFactory_2" factory-method="getUser"></bean>

7.scope属性 id属性:根据id属性值获取对象; 在一个spring配置文件中,可以有多个bean标签,但是bean标签id属性值不同 class属性类的全路径 scope属性 (1)主要作用:配置创建对象是单实例还是多实例对象 (2)属性值: 默认值,singleton,表示单实例对象; prototype,表示多实例对象; action是多实例对象 request:把创建对象放到request里面 session:把创建对象放到session里面 globalSession:把创建对象放到globalSession里面 8.属性注入:   (1)使用有参构造注入

代码语言:javascript
复制
<bean id="book" class="cn.itcast.attr.Book">
		<constructor-arg name="bname" value="易筋经"></constructor-arg>
		<constructor-arg name="author" value="小王"></constructor-arg>
	</bean>

  (2)使用Set方法注入:

代码语言:javascript
复制
<bean id="orders" class="cn.itcast.attr.Orders">
		<property name="oname" value="洗髓经"></property>
		<property name="oaddress" value="嵩山"></property>
	</bean>

  (3)注入对象类型属性:

代码语言:javascript
复制
<!-- 注入对象类型属性-->
	<bean id="userDaoImpl" class="cn.itcast.attr.UserDao"></bean>
	
	<bean id="userService" class="cn.itcast.attr.UserService">
		<!-- 如果注入普通类型属性 使用value属性 ,如果注入对象类型属性,使用ref属性
			name: 类里面的属性名称
			ref:dao对象所在标签id值
		-->
		<property name="userDao" ref="userDaoImpl"></property>
	</bean> 	

9.Test方法;

代码语言:javascript
复制
@Test
	public void testUserDao() {
		ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
		UserDao dao = context.getBean("userDao",UserDao.class);
		dao.add();
		context.close();
		
	}

二、第二天

Spring 1 spring分模块配置开发 (1)加载配置文件的时候,加载多个。

代码语言:javascript
复制
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("bean.xml","bean2.xml");

(2)在配置文件中一如其它配置文件

代码语言:javascript
复制
 <import resource="classpath:bean2.xml"/>

2 注入复杂类型属性(会用)

代码语言:javascript
复制
<!-- 注入复杂类型属性 -->
	<bean id="customer" class="com.edu.nuc.bean.Customer">
	
		<!-- 数组 -->
		<property name="arr">
			<list>  
				<value>欧阳娜娜</value>  <value>沈月</value> <value>刘惜君</value>
			</list>
		</property>
		
		<!-- list -->
		<property name="list">
			<list>	
				<value>张三丰</value>	<value>李小龙</value>	<value>乔峰</value>	
			</list>
		</property>
		
		<!-- map -->
		<property name="map">
			<map>	
				<entry key="体育" value="足球">	</entry><entry key="体育" value="篮球"></entry>	
			</map>
		</property>
		
		<!-- properties -->
		<property name="proper">
			<props>
				<prop key="driver">com.mysql.jdbs.Driver</prop>	<prop key="url">jdbc:mysql://localhost:3306/db</prop>
			</props>
		</property>
		
		
	</bean>

3 spring的bean管理(注解)(重点) 使用注解方式实现创建对象和注入属性 什么是注解? (1)注解代码中特殊标记 (2)写法: @注解名称(属性名称1=属性值1, 属性名称2=属性值2) (3)注解可以使用类上面、使用方法上面、使用在属性上面 (4)为什么使用注解:替代配置文件实现一部分功能,简化配置 3.1jar包

3.2配置文件

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- bean definitions here -->
<!-- 开启注解扫描  该包下的所有注解都可以扫描到 -->
<context:component-scan base-package="com.edu.nuc.bean"></context:component-scan>
<context:component-scan base-package="com.edu.nuc.test"></context:component-scan>

</beans>

3.3Spring注解创建对象 与@component功能相同的注解: //value可以省略     @Controller :WEB层     @Service:业务层     @Repository:持久层 例子: (1) bean包下:

代码语言:javascript
复制
@Component("User")           //创建实例对象
//@Scope(value="prototype")   单例和多例设置
public class User {

@Value("刘惜君")     //赋值
private String name;
@Value("18")
private int age;
public void test() {
System.out.println("努力努力再努力");
System.out.println("我喜欢"+this.name+",她今年 "+this.age+"岁了");
}
}

Test包:

代码语言:javascript
复制
@Test
public void test_1() {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
User user = context.getBean("User",User.class);
user.test();
context.close();
}

(2)对象类型属性

代码语言:javascript
复制
@Component("People")
public class People {
@Autowired
private User user;
}

@Test

代码语言:javascript
复制
public void test_2() {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
People p = context.getBean("People",People.class);
System.out.println(p.toString());
context.close();
}

3.4配置文件和注解混合使用 创建对象使用配置文件 注入属性使用注解 4 AOP概念和原理 4.1 aop概述:Aspect Oriented Programming面向切面(方面)编程,不通过修改源代码方式实现功能扩展 aop底层原理:横向抽取机制,动态代理实现 4.2aop操作相关术语 切入点:实际增强的方法 增强/通知;增强一个类里面的方法,写增强的逻辑称为 通知/通知 切面:在方法上面写增强逻辑,应用到切入点的过程。 4.3:通知类型 前置通知:<aop:before> 后置通知:<aop:sfter-returning> 环绕通知:<aop:around> 异常通知:<aop:after-throwing> 最终通知:<aop:after> 4.5 AOpjar包

4.6使用表达式配置切入点:

代码语言:javascript
复制
execution(* cn.itcast.UserDao.update(..))      //增强该方法
execution(* cn.itcast.UserDao.*(..))           //增强该类的所有方法
execution(* *.*(..))                           //增强所有

4.7实例:

bean.xml:

代码语言:javascript
复制
<beans>

        <bean id= "user" class="com.edu.nuc.bean.User"></bean>

    <bean id= "myUser" class="com.edu.nuc.bean.MyUser"></bean> 
    <aop:config> 
        <!-- 配置切点 --> 
        <aop:pointcut expression="execution(* com.edu.nuc.bean.User.test(..))" id="p1"/> 
        <!-- 配置切面 --> 
    <aop:aspect ref="myUser" > 
        <aop:before method="before" pointcut-ref="p1"/> 
        <aop:around method="round" pointcut-ref="p1"/> 
    </aop:aspect> </aop:config>
 </beans>

原来的类:

代码语言:javascript
复制
public class User {
public  void test() {
System.out.println("努力努力再努力");
}
}

增强类:

代码语言:javascript
复制
代码语言:javascript
复制
public class MyUser {

public void before() {
System.out.println("我们的口号是什么:");
}

//环绕需要这样写

代码语言:javascript
复制
public  void round(ProceedingJoinPoint p) throws Throwable {
		System.out.println("环绕前");
		p.proceed();
		System.out.println("环绕后");
	}
}

Test方法:

代码语言:javascript
复制
public class TestDemo {
@Test
public void test_1() {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
User user = context.getBean("user",User.class);
user.test();

}
}

结果:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年07月12日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档