java spring 学习笔记(Bean和SPEL语言)

1.什么是Bean
Bean其实就是一个对象,是类的一个实例化对象,只不过他不是由new运算符来创建,而是通过IoC容器进行创建和管理(个人理解)。
2.通过XML来定义Bean
虽然bean是由容器创建和管理的,但是他不可能直接给所有的类都创建对象,这时候就需要我们标识出那个类需要创建对象,以及怎么创建。

<!--这是声明部分(就和c++的头文件类似),暂时还不知道他的具体意思-->
<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">

<!-- 下面就是bean的定义部分,表明了要给哪个类创建以及怎么创建对象-->
<bean id="myShape" class="chapter1.Circle"><!--id就是对象的名字(也就是变量名) class则指明要给那个类创建对象那个-->
<!--下面就是对对象一些属性的赋值(类似构造函数)-->
	<property name="r"><!--表明要对属性R进行操作-->
		<value>2.5</value><!--将r赋值为2.5-->
	</property>
</bean>

3.通过注解来定义Bean
由于使用XML定义Bean的代码比较复杂,所以就有了简单的通过注解定义Bean的方法。
首先在XML文件中加入以下代码,表示使用注解定义Bean,就会自动扫描该包下的所有类,对添加了注解的类进行创建Bean,名字默认是首字母小写的类名。

<?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"<!-- y一定要记得加这一行引入相应的包-->
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context <!-- y一定要记得加这一行引入相应的包-->
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:component-scan base-package="chapter1" />
package chapter1;
//导入相应的包
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component//添加注解,表示该类会自动创建一个Bean
public class Circle implements Shape{
	@Value("#{10}")//对属性赋值,括号里的是SPEL语言
	double r;
	public void setR(double r)
	{
		this.r = r;
	}
	public double getR()
	{
		return r;
	}
	public double area()
	{
		return Math.PI * r * r;
	}
}

4.使用@Configuration和@Bean定义Bean
这个和注解不同,注解仍然需要编写XML文件,但是他不用。它的用法是,用@Configruation注解一个类,那么该类下的所有用@Bean注解了的方法返回的值都会自动创建一个Bean,名字默认和方法名相同,也可以指定名字。

//下面就是用@Configuration注解的类
package chapter1;
import org.springframework.context.annotation.*;
@Configuration
public class Configure {
	@Bean//如果要指定名字可以@Bean("beanName")这样写
	public Speak mySpeak()
	{
		Speak s = new Speak();
		System.out.println(s + "您好");
		return s;//返回的是一个Speak类型的对象,则自动为Speak类创建Bean
	}
}

5.Bean的调用和使用
Bean是由容器管理的,也就是说你在编写代码的时候要先创建一个容器后,通过容器来调用Bean(这是我自己的理解)

//下面是使用XML文件方式,这和使用注解是一样的,因为使用注解只是为了简化XML代码,和Bean的调用没太大的关系
//首先就是导入相关的包,这个我也暂时不是很懂这些包
package chapter1;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.*;
public class Test {
	public static void main(String[] args)
	{
		//创建容器,之前我们说我们告诉容器那些类要创建Bean,这里用的是编写XML文件的方式
		ApplicationContext a = new FileSystemXmlApplicationContext("E:\\javaweb\\First_Project\\src\\chapter1\\myContext.xml");//这行代码我的理解就是创建容器,容器创建完成后就会根据我们提供的XML文件去创建相应的Bean,这个方法的路径就是绝对路径,还有其他的构造犯法
		//从容器中拿出相应的对象
		AnyShape s=(AnyShape)a.getBean("anyShape");//调用容器的getBean()方法得到anyShape这个“对象”这里返回的是object类型的,所以要强制转换
		//调用对象的实例方法
		s.outputarea();
	}
}


//下面是使用@Configuration和@Bean
package chapter1;

import java.util.*;
import org.springframework.context.annotation.*;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
public class textDemo {
	public static void main(String[] args)
	{
		//使用构造方法创建容器,这个方法有好几个重载
		AnnotationConfigApplicationContext x = new AnnotationConfigApplicationContext("chapter1");
		//下面的一样了
		Speak s = (Speak)x.getBean("mySpeak");
		System.out.println(s.getMessage()); 

	}
}


6.混合使用
总的来说定义Bean的方法有使用XML文件和@Configuration两种(使用注解算XML),这两种其实是可以混合使用的,当你一XML文件为主时(即在创建容器时构造方法使用XML的那种)只需在XML文件中标签下添加以下代码

<context:annotation-config/>
<bean class="chapter.MyConfig"><!--引号中是你添加了@Configuration的类,如果有多个则需要一一列出来 -->

如果以@Configuration为主,那么只需在@Configuration的下一行添加ImportResource(“XML文件路径”)则XML中定义的Bean也可以用

package chapter1;
import org.springframework.context.annotation.*;
@Configuration
@ImportResource("class:myContext.xml")
public class Configure {
	@Bean
	public Speak mySpeak()
	{
		Speak s = new Speak();
		System.out.println(s + "您好");
		return s;
	}
}

7.SPEL语言
这就是一种表达式语言,定义了像加减乘除运算符和变量类型等等,作用是在定义Bean的时候实现扩展功能(例如给List赋值)。这里我感觉内容比较多,难记。我觉得没必要一次性全部记下,遇到就记下来就可以了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值