13-spring学习-class类型表达式

本文介绍了Spring表达式语言(EL)中Class表达式的使用方法,包括获取Class对象、调用静态属性和方法、实例化对象及类型判断等。通过具体示例展示了如何在Java程序中灵活运用这些技巧。

Class表达式

spring中对于class反射机制也有自己的处理。

1,class::使用T(类名)的形式可以取得一个指定泛型类型的Class对象

范例:

package com.Spring.ELDemo;
import org.springframework.expression.EvaluationContext;
import org.springframework.expression.Expression;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;

public class TestSimple2 {
    
    public static void main(String[] args) {
        
        ExpressionParser parser=new SpelExpressionParser();
        Expression exp=parser.parseExpression("T(String)");
        EvaluationContext context=new StandardEvaluationContext();
        System.out.println(exp.getValue(context));
    }
}

运行结果:

class java.lang.String

计算结果:Class<String>。

 

2,静态属性:如果调用的静态属性则使用:“T(类).静态属性名称”。

Expression exp=parser.parseExpression("T(Integer).MAX_VALUE");

运行结果:

 

3,静态方法

例如在Integer类里面有一个parseInt()的方法。此方法可以接收一个字符串,同时返回一个Int型数据

范例:

Expression exp=parser.parseExpression("T(Integer).parseInt('123123')");

运行结果:

 

4,无参构造实例化

虽然给出了静态操作,但是严格来说使用最多的情况一定是类产生实例化对象,此处依然可以使用同样的方式完成,可以直接使用“new 类型()”的方式实例化对象。

范例:实例化Date对象。

package com.Spring.ELDemo;
import org.springframework.expression.EvaluationContext;
import org.springframework.expression.Expression;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;

public class TestSimple2 {
    
    public static void main(String[] args) {
        
        ExpressionParser parser=new SpelExpressionParser();
        Expression exp=parser.parseExpression("new java.util.Date()");
        EvaluationContext context=new StandardEvaluationContext();
        System.out.println(exp.getValue(context));
    }
}

运行结果:

 

但是现在都是调用无参构造,如何调用有参构造。

5,有参构造实例化

Expression exp=parser.parseExpression("new String('hello')");

运行结果:

 

6,Instanceof:在对象的开发过程中,也可以进行实例对象类型的判断。

使用方式:对象实例   instanceof  T(类)

范例:判断一个字符串是否String的实例。

package com.Spring.ELDemo;
import org.springframework.expression.EvaluationContext;
import org.springframework.expression.Expression;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;

public class TestSimple2 {
    
    public static void main(String[] args) {
        
        ExpressionParser parser=new SpelExpressionParser();
        Expression exp=parser.parseExpression("'hello' instanceof T(String)");
        EvaluationContext context=new StandardEvaluationContext();
        System.out.println(exp.getValue(context));
    }
}

注意:上面的String一定要加上T(),否则就会报错

运行结果:

 

 

 利用字符串完整实现类反射机制的各种操作,它的各种操作只能处理很简单的功能。

 

Thymeleaf Extras Spring Security Spring JDBC 是一个扩展包,它允许你在Spring Security框架中使用Spring Data JPA来存储授权相关的数据,比如用户的角色映射到特定的权限。在Spring Boot项目实战中[^1],通常涉及以下步骤: 1. **配置Spring Security**: - 配置`SecurityConfig`类以连接数据库并定义认证和授权策略。这可能包括设置UserDetailsService来从数据库加载用户信息,以及AuthenticationProvider来验证凭据。 ```java @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { // ...省略具体配置... @Autowired private UserRepository userRepository; // 假设这是你的用户Repository @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.userDetailsService(userDetailsService()); } // ... } ``` 2. **使用JDBC查询用户权限**: - 使用JdbcTemplate执行SQL查询,查找用户的角色和对应的权限。例如,查询用户admin的角色和权限: ```java @Autowired private JdbcTemplate jdbcTemplate; @PostAuthorize("hasAuthority(#role)") public String securedEndpoint(@PathVariable String role) { List<String> authorities = jdbcTemplate.queryForList( "SELECT authority FROM roles WHERE username = ?", new Object[] { "admin" }, String.class); return authorities.toString(); // 示例返回结果:["ROLE_ADMIN"] } ``` 3. **Thymeleaf模板显示权限**: - 在Thymeleaf视图中,你可以通过表达式语言(EL)来条件渲染受保护的内容,依赖于用户的角色和权限。 ```html <div th:if="${#authorization.hasRole('ROLE_ADMIN')}" th:text="You have admin privileges!"></div> ``` 4. **登录页面与验证**: - 用户可以访问`/loginPage` URL来开始登录流程,输入用户名admin和密码123456后,Spring Security会进行身份验证,如果验证成功,用户将看到他们被赋予的相应权限。 要了解更多关于ThymeleafExtras-SpringSecurity-Spring-JDBC的细节,建议查阅官方文档或者深入阅读《Spring Boot项目实战》这本书中有关章节。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值