spring初始化自动装配

<bean id="users" class="com.fz.entity.User" init-method="abc" destroy-method="destory" scope="singleton">

	id id值
	name 名称
	class 指定类
	init-method 初始化
	destroy-method 销毁
	scopy = singleton | prototype 多实例,使用时再实例化对象
    lazy-init="true"
</bean>

spring容器使用注解
	beans.xml 文件加入关联

	<?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">

		<!-- 注解扫描相关包路径 -->
		<context:annotation-config/>
		<context:component-scan base-package="com.fz.entity"/>

	</beans>



初始化方法
	配置方式
		init-method="abc"   容器在构造方法完成后,直接执行abc方法

		scope="prototype" 如果是多实例,则是每次使用,都要执行构造方法,同时执行初始化方法

		scope="singleton" 单例模式,是默认的,是立即装载 都要执行构造方法,同时执行初始化方法

	注解方式
			package com.fz.entity;
			import org.springframework.context.annotation.Scope;
			import org.springframework.stereotype.Component;
			import org.springframework.stereotype.Controller;
			import org.springframework.stereotype.Service;
			import javax.annotation.PostConstruct;
			import javax.annotation.PreDestroy;
			/**
			 * Created by webrx on 2017-07-03.
			 */
			//@Controller("uok")
			//@Component("uok")
			@Service("uok")  //@Scope("prototype")
			@Scope("singleton")

            @Controller    User -> user  
                            userInfo -> userInfo
			public class User {
			    public User(){
				System.out.println("构造方法()..");
			    }
			    @PostConstruct  初始化方法
			    public void init(){
				System.out.println("init--初始化...");
			    }
			    @PreDestroy
			    public void destory(){
				System.out.println("销毁方法");
			    }
			    public void show(){
				System.out.println("数据显示........");
			    }
			    @PostConstruct
			    public void abc(){
				System.out.println("abc..");
			    }
			}


销毁方法
	配置方式
		destroy-method="destory"
	
	当容器销毁对象时,会自动调用destory方法
		ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
		User u = ctx.getBean("users",User.class);
		ctx.close();

	注解方式
			package com.fz.entity;
			import org.springframework.context.annotation.Scope;
			import org.springframework.stereotype.Component;
			import org.springframework.stereotype.Controller;
			import org.springframework.stereotype.Service;
			import javax.annotation.PostConstruct;
			import javax.annotation.PreDestroy;
			/**
			 * Created by webrx on 2017-07-03.
			 */
			//@Controller("uok")
			//@Component("uok")
			@Service("uok")  //@Scope("prototype")
			@Scope("singleton")
			public class User {
			    public User(){
				System.out.println("构造方法()..");
			    }
			    @PostConstruct
			    public void init(){
				System.out.println("init--初始化...");
			    }
			    @PreDestroy  //销毁方法
			    public void destory(){
				System.out.println("销毁方法");
			    }
			    public void show(){
				System.out.println("数据显示........");
			    }
			    @PostConstruct
			    public void abc(){
				System.out.println("abc..");
			    }
			}



自动装配
	<!-- autowire自动装配  简化spring配置
  		no不使用自动装配
  		byName 根据名称(set方法名来的)去查找相应的bean,如果有则装配上
  		byType 根据类型进行自动装配  不用管bean的id.但是同一种类型的bean只能有一个。建议慎用
  		constructor 当通过构造器 注入 实例化bean时 适用byType的方式 装配构造方法
  	 -->
	byName
	byType
	default-autowire="byName"

	    <bean id="user" class="com.fz.entity.User" autowire="byType"/>

	    <bean id="book" class="com.fz.entity.Book">
		<property name="id" value="100"/>
		<property name="name" value="《计算机编程入门》"/>
	    </bean>

	    <bean id="st" class="com.fz.entity.Student">
		<property name="sno" value="111"/>
		<property name="name" value="李四国"/>
	    </bean>

	    <bean id="sts" class="com.fz.entity.Student">
		<property name="sno" value="222"/>
		<property name="name" value="张三丰"/>
	    </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"
		       xsi:schemaLocation="http://www.springframework.org/schema/beans
				       http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
				       http://www.springframework.org/schema/context
				       http://www.springframework.org/schema/context/spring-context-4.3.xsd"  default-autowire="byName">

		    <!-- 注解扫描相关包路径 -->
		    <context:annotation-config/>
		    <context:component-scan base-package="com.fz.entity"/>

		    <!-- -->
		    <!--
		    <bean id="user" class="com.fz.entity.User">
			<property name="book" ref="book"/>
		    </bean>
		    -->

		    <bean id="user" class="com.fz.entity.User"/>

		    <bean id="book" class="com.fz.entity.Book">
			<property name="id" value="100"/>
			<property name="name" value="《计算机编程入门》"/>
		    </bean>

		    <bean id="st" class="com.fz.entity.Student">
			<property name="sno" value="111"/>
			<property name="name" value="李四国"/>
		    </bean>

		    <bean id="student" class="com.fz.entity.Student">
			<property name="sno" value="222"/>
			<property name="name" value="张三丰"/>
		    </bean>

		</beans>

注解功能
	1)配置spring容器
		<?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">

		    <context:annotation-config/>
		    <context:component-scan base-package="com.fz.entity"/>
		</beans>
	2)注解使用
		@Component 如果不写,则使用类名小写作为名称

		@Component("uuu")

		@Data @Component
		public class Book {
		    @Value("100")
		    private int id;

		    @Value("《mysql数据库技术》")
		    private String name;
		}

		

		@Autowired 根据类型自动装配


		 @Autowired //根据类型自动装配 byType

		 @Autowired @Qualifier("user") //根据名称自动装配 byName
		 private User user;

		 @Resource(name="book")


	3)注解bean类方法
		注解bean类  com.entity.Db类
		---------------------------------------------------
			@Component("db")
			public class Db {
			    public void show(){
				System.out.println("dbshow");
			    }
			}

			@Controller("member")
			public class Member {
			    public void save(){
				System.out.println("saveok");
			    }
			}

			@Service("m")
			public class Member {
			    public void save(){
				System.out.println("saveok");
			    }
			}

			@Repository("mm")
			public class Member {
			    public void save(){
				System.out.println("saveok");
			    }
			}
	4)注解单例 多例
	---------------------------------------------------
		@Repository("mm") @Scope("singleton")  单例默认
		public class Member {

		}

		@Repository("mm") @Scope("prototype")  多实例
		public class Member {

		}

	5)注解初始化方法
	import javax.annotation.PostConstruct;
	---------------------------------------------------
	    @PostConstruct
	    public void a(){
		System.out.println("初始化1");
	    }

	    @PostConstruct
	    public void init(){
		System.out.println("初始化2");
	    }

	6)注解销毁方法
	import javax.annotation.PreDestroy;
	---------------------------------------------------
	    @PreDestroy
	    public void close(){
		System.out.println("退出");
	    }

	    @PreDestroy
	    public void exit(){
		System.out.println("销毁");
	    }


	7)属性注入
	-------------------------------------------------------
	@Data
	@Component("book")
	@Scope("prototype")
	public class Book {
	    @Value("BS101")
	    private String bid;
	    @Value("java书籍")
	    private String bname;
	}

	@Data @Repository("mm") @Scope("prototype")
	public class Member {
	    @Resource(name="book")  此处的book 就是指定工厂中的  上的那book名@Component("book")
	    相当于beans.xml 中的<property name="book" ref="book"></property>
	    private Book book;
	}


	win10 

	@Data @Repository("mm") @Scope("prototype")
	public class Member {
	    @Autowired  根据类型自动注入对象
	    private Book book;
	}

	8)延迟加载
	-----------------------------------------------------------------
		单例模式是默认的,会立即加载  加上@Lazy 不自动加载,第一次使用时再加载
		@Data
		@Component @Scope("singletone") @Lazy
		public class Teacher {
		    private String name;

		    public Teacher() {
			System.out.println("空构造方法");
		    }

		    public Teacher(String name) {
			this.name = name;
			System.out.println("有参数name的构造方法");
		    }
		    public void info(){
			System.out.println("老师姓名:"+this.name);
		    }
		}

		@Scope("prototype") 多实例,默认使用的使用时加载

		@Data @Repository("mm") @Scope("singleton") @Lazy   延迟加载,在第一次使用时加载
		public class Member {

		}

		@Data @Repository("mm") @Scope("singleton") @Lazy(false)  立即加载初始化
		public class Member {
		}

		beans.xml 

		<beans default-lazy-init="true"> 所有bean都延迟实例化初始化加载

		<beans  default-autowire="byName">默认注入相关属性对象

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值