Ioc 配置的三种方式
1:xml 配置
顾名思义,就是将bean的信息配置.xml文件里,通过Spring加载文件为我们创建bean。这种方式出现很多早前的SSM项目中,将第三方类库或者一些配置工具类都以这种方式进行配置,主要原因是由于第三方类不支持Spring注解。
- 优点: 可以使用于任何场景,结构清晰,通俗易懂
- 缺点: 配置繁琐,不易维护,枯燥无味,扩展性差
举例:
1:配置xx.xml文件
2:声明命名空间和配置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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="userDaoImpl" class="com.kuang.dao.UserDaoImpl"/>
<bean id="mysqlImpl" class="com.kuang.dao.UserDaoMysqlImpl"/>
<bean id="oracleImpl" class="com.kuang.dao.UserDaoOracleImpl"/>
<bean id="UserServiceImpl" class="com.kuang.service.UserServiceImpl">
<!--
ref: 引用spring容器中创建好的对象
value:具体的值,基本的数据类型;
-->
<property name="userDao" ref="mysqlImpl"/>
</bean>
</beans>
2:Java 配置
将类的创建交给我们配置的JavcConfig类来完成,Spring只负责维护和管理,采用纯Java创建方式。其本质上就是把在XML上的配置声明转移到Java配置类中
- 优点:适用于任何场景,配置方便,因为是纯Java代码,扩展性高,十分灵活
- 缺点:由于是采用Java类的方式,声明不明显,如果大量配置,可读性比较差
举例:
1:创建一个配置类, 添加@Configuration注解声明为配置类
2:创建方法,方法上加上@bean,该方法用于创建实例并返回,该实例创建后会交给spring管理,方法名建议与实例名相同(首字母小写)。
注:实例类不需要加任何注解
//这个也是被Spring容器托管,注入到容器中,因为它本身就是一个@Compoent
//@Configuration代表这是一个配置类,就是我们之前配置的Bean.xml文件
@Configuration
//@ComponentScan("com.kuang.pojo")//扫描包
@Import(KuangConfig2.class)//引用其他的配置文件,在一个文件中;
public class KuangConfig {
//注册这个Bean 就相当于我们之前写的Bean标签
//这个方法的名字,就相当于Bean标签中的id属性;
//这个方法的返回值,就相当于Bean标签中的class属性;
@Bean("getUser")
public User getUser(){
return new User();//就是要返回注入到Bean的对象
}
}
User类
//这里注解的意思是:这个类被Spring 接管了,被注册到了容器中;
//@Component
public class User {
private String name;
public String getName() {
return name;
}
//属性的注入值
@Value("yaoji123")
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
'}';
}
}
测试:
这里我们使用的是使用Java的方式配置Spring,这里是Application所有的实现方式。
//注解配置
//如果完全使用了配置类方法去做,我们就只能通过 AnnotationConfig 上下文获取容器,通过配置类的class对象加载。
ApplicationContext context = new AnnotationConfigApplicationContext(KuangConfig.class);
User getUser = (User) context.getBean("getUser");
System.out.println(getUser.getName());
3:注解配置
通过在类上加注解的方式,来声明一个类交给Spring管理,Spring会自动扫描带有@Component,@Controller,@Service,@Repository这四个注解的类,然后帮我们创建并管理,前提是需要先配置Spring的注解扫描器。
- 优点:开发便捷,通俗易懂,方便维护。
- 缺点:具有局限性,对于一些第三方资源,无法添加注解。只能采用XML或JavaConfig的方式配置
举例:
1:对类添加@Component相关的注解,比如@Controller,@Service,@Repository
2:设置ComponentScan的basePackage,
比如: <context:component-scan base-package=‘tech.pdai.springframework’>,
或者: @ComponentScan(“tech.pdai.springframework”)注解,
或者: new AnnotationConfigApplicationContext(“tech.pdai.springframework”)指定扫描的basePackage.
@Controller
public class UserController {
@Value("幺鸡2")
public String name;
// @Value("幺鸡")
// public void setName(String name) {
// this.name = name;
// }
}
@Repository
public class UserDao {
@Value("张三")
public String name;
}
// 等价与: <bean id="user" class="com.kuang.pojo.User"/>
//@Component 组件
@Component
public class User {
public String name;
//相当于 <property name="name" value="yaoji2"/>
@Value("yaoji2")
public void setName(String name) {
this.name = name;
}
}
@Service
public class UserService {
@Value("Service")
public String name;
public void run(){
System.out.println(name+"跑步!");
}
@Override
public String toString() {
return "UserService{" +
"name='" + name + '\'' +
'}';
}
}
测试:
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
UserController userController = context.getBean("userController", UserController.class);
System.out.println(userController.name);
UserDao userDao = context.getBean("userDao", UserDao.class);
System.out.println(userDao.name);
User user = context.getBean("user", User.class);
System.out.println(user.name);
UserService userService = context.getBean("userService", UserService.class);
System.out.println(userService);
userService.run();
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/71884.html