Spring中的Bean
Spring中的Bean
普通的Bean
xml配置文件
<bean id="bean1" class="包名.类名"/>
实例化方法
1.构造器实例化
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");
类名 实例名 = (类名) applicationContext.getBean("bean1");
2.静态工厂方式实例化 略
3.实例工厂方式实例化 略
Bean的作用域
singleton(单例)、prototype(原型)、request、session、globlaSession、application、websocket
1.singleton 作用域 (默认)
<bean id="bean1" class="包名.类名" scope="singleton" />
单例模式 ,多次实例化也只会产生一个对象
2.prototype 作用域
<bean id="bean1" class="包名.类名" scope="prototype" />
每次实例化请求都会返回一个新实例
Bean生命周期
Spring会对singleton进行管理 具体略
Bean的装配方式(依赖注入方式)
①基于xml装配
②基于Annotation的装配
Spring可以对Bean中的属性进行初始化(值/引用)
1.Setter Injection(值注入)
<bean id="user1" class="包名.类名"> <property name="username" value="张三"></property> <property name="password" value="654321"></property> <property name="list"> <list> <value>"setlistvalue1"</value> <value>"setlistvalue2"</value> </list> </property> </bean>
注:id:Bean的唯一标识符
class:Bean的具体实现类
property:setter赋值使用此标签 name为Bean实例中的属性名,ref 或 value为属性值
ref:另一个Bean的id
value:一个常量值
上面例子给出了list 的填充 下面给出set和map的填充
// set与list基本相同
<set> <value>"setlistvalue1"</value> <value>"setlistvalue2"</value> </set> // map <map> <entry key="p1" value="foo" /> <entry key="p2" value="wz" /> </map>
2.Constructor Injection(构造注入)
<bean id="user2" class="包名.类名"> <constructor-arg index="0" value="tom"/> <constructor-arg index="1" value="123456"/> <constructor-arg index="2"> <list> <value>"setlistvalue1"</value> <value>"setlistvalue2"</value> </list> </constructor-arg> </bean>
3.基于Annotation的装配
先要引入依赖
<dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-annotations-api</artifactId> <version>9.0.13</version> </dependency> <!--两选一--> <dependency> <groupId>javax.annotation</groupId> <artifactId>jsr250-api</artifactId> <version>1.0</version> </dependency>
常用注解
-
@Component: 泛化概念 仅仅就能表示一个组件(Bean)
-
@Repository:将数据访问层(DAO层)中的类标识为Spring中的Bean,功能与Component相同
-
@Service:将业务层(Service层)中的类标识为Spring中的Bean,功能与Component相同
-
@Controller:将控制层(Spring MVC 中的Controller层)中的类标识为Spring中的Bean,功能与Component相同
-
@Autowired:用于对Bean中的属性、属性的setter方法及构造方法进行标注、配合注解处理器完成Bean的自动配置工作 (先按类型自动查找注册的Bean(包括接口类) 、如果有多个则按名称查找)
-
@Resource:与Autowired相同 有name 或者 type属性 指定name 按照Bean id进行装配,指定type按照类型进行装配,不指定先按名称再按类型
-
@Qualifier:与@Autowired配合使用,指定Bean名称(id)@Autowired + @Qualifier("bean名称")
@Respository("userDao")
public class UserDaoImp1 implements UserDao{
public void save(){
System.out.println("userdao...save...");
}
}
@Service //这样会默认和类名相同
public class UserServiceImp1 implements UserService{
@Resource(name="userDao")
private UserDao userDao;
public void save(){
this.userDao.save();
System.out.println("userservice...save...");
}
}
配置beans.xml
<!--方法1 效率低--> <context:annotation-config /> <bean id="userDao" class="包名.UserDao"/> <bean id="UserServiceImp1" class="包名.UserServiceImp1"/> <!--方法2--> <context:component-scan base-package="Bean所在包路径">
4.自动装配
<bean id="userDao" class="包名.UserDao"/> <bean id="UserServiceImp1" class="包名.UserServiceImp1" autowire="byName" />
autowrie 属性值:default(根据beans标签)、byName、byType、constructor(根据构造函数参数类型)、no(不自动装配)

浙公网安备 33010602011771号